在比较 postgresql(Windows 中的 9.2.4 版)中的日期时,我遇到了一个奇怪的情况。
我的表中有一个列update_datetype timestamp without timezone。 客户可以仅使用日期(例如:)2013-05-03或日期与时间(例如:)搜索此字段2013-05-03 12:20:00。
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);