Sql 使用date\u trunc的缺点
几年前,我听说在sql中截断日期不是一个好做法。这是真的吗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
我需要以“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));