在 postgresql(windows 版本 9.2.4)中比较日期时,我遇到了一个奇怪的场景。
我的表中有一列显示 update_date
,类型为 timestamp without timezone
。
客户端可以只用日期(例如:2013-05-03
)或带时间的日期(例如:2013-05-03 12:20:00
)。
此列的值作为当前所有行的时间戳,并且具有相同的日期部分 2013-05-03
,但时间部分不同。
当我比较这个专栏时,我得到了不同的结果。喜欢以下内容:
select * from table where update_date >= '2013-05-03' AND update_date <= '2013-05-03' -> No results
select * from table where update_date >= '2013-05-03' AND update_date < '2013-05-03' -> No results
select * from table where update_date >= '2013-05-03' AND update_date <= '2013-05-04' -> results found
select * from table where update_date >= '2013-05-03' -> results found
我的问题是如何使第一个查询能够获得结果,我的意思是为什么第三个查询有效但第一个查询无效?
最佳答案
@Nicolai 关于转换以及为什么任何数据的条件都是错误的是正确的。我猜你更喜欢第一种形式,因为你想避免对输入字符串进行日期操作,对吗?你不需要害怕:
SELECT *
FROM table
WHERE update_date >= '2013-05-03'::date
AND update_date < ('2013-05-03'::date + '1 day'::interval);
关于sql - 如何比较 Postgresql 中日期时间字段中的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19469154/