在时间戳上处理postgresql中两个日期之间的最佳方式



我的表中有yyyy-mm-dd HH:MM:SS格式的日期字段,希望获取11-july-2020(包括14-july-2020(之间的记录,但14th上缺少记录。尝试>= && <SYMMETRIC,但没有一个工作。

当前使用CCD_ 7。它不包括14日创建的记录。

我想你想要:

where col >= '2020-07-11' and col < '2020-7-15'

或者,使用时间戳来表达这一点:

where col::timestamp >= '2020-07-11'::timestamp and
col::timestamp < '2020-07-14'::timestamp + interval '1 day'

请注意,高端比2020-07-14晚一天,因此您可以获得当天的所有时间。

您也可以将between用作:

where col::date between '2020-07-11'::date and '2020-07-14'::date

但我不建议将between与日期/时间数据类型一起使用——正是因为时间组件存在问题。

如果字段的格式为yyyy-mm-dd HH:MM:SS,则它是时间戳字段,而不是日期字段。正如@Gordon所展示的那样,这对需要进行的比较产生了很大的影响。如果将时间戳与日期(2020年7月14日(进行比较,则日期将变为时间为00:00:00:的时间戳

select '07/14/2020'::timestamp;
timestamp      
---------------------
2020-07-14 00:00:00

这意味着你将错过13/14午夜之后的14日的时间戳。

最新更新