Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用date\u trunc的缺点_Sql_Postgresql - Fatal编程技术网

Sql 使用date\u trunc的缺点

Sql 使用date\u trunc的缺点,sql,postgresql,Sql,Postgresql,几年前,我听说在sql中截断日期不是一个好做法。这是真的吗 我需要以“yyyy-MM-dd”格式从表中获取日期类型列的值,日期当前以“yyy-MM-dd hh:MM:ss”格式存储在表中将其存储在任何类型的格式中是不好的做法,因为您应该将其存储为text或varchar 然后,要获得日期,只需投下: SELECT col::date 请注意,“日期”取决于您当前的时区设置 更多: 在正确的情况下使用date\u trunc没有什么错 主要问题是涉及到b树索引的位置。如果您在some\u t

几年前,我听说在sql中截断日期不是一个好做法。这是真的吗


我需要以“yyyy-MM-dd”格式从表中获取日期类型列的值,日期当前以“yyy-MM-dd hh:MM:ss”格式存储在表中

将其存储在任何类型的格式中是不好的做法,因为您应该将其存储为
text
varchar

然后,要获得日期,只需投下:

SELECT col::date
请注意,“日期”取决于您当前的时区设置

更多:


在正确的情况下使用
date\u trunc
没有什么错

主要问题是涉及到b树索引的位置。如果您在
some\u timestamp
上有索引,并且您搜索
date\u trunc('day',some\u timestamp)=date'2012-01-01'
,PostgreSQL将无法使用该索引

(理论上,它可以将
date\u trunc
表达式重写为可索引的范围谓词,但事实并非如此)

如果你改写:

some_timestamp >= DATE '2012-01-01' AND some_timestamp < DATE '2012-01-02'

但是,由于每个额外的索引都有维护成本,因此最好只编写谓词,以便在可能的情况下可以轻松地与常规列索引一起使用。

我在Oracle中经常使用此方法,不知道问题出在哪里。您认为将时间戳转换为具有所需模式的日期更好吗?是的,这就是我所听到的。索引表达式中的函数必须标记为不可变
create index blahindex on blahtable (date_trunc('day', some_timestamp));