PostgreSQL中筛选PST时区20:00-21:00的epoch时间戳
解决PostgreSQL中筛选PST时区20:00-21:00记录的问题
你之前的SQL只判断了小时大于20,这会误把21点及以后的记录也包含进来,我们需要精准锁定20:00到21:00之间(含20:00、不含21:00)的时间段。这里提供两种实用的解决方案:
方法一:直接对比时间部分
把epoch时间转换为PST时区的完整时间后,提取其time类型的时分秒部分,再和目标时间范围做对比:
SELECT created_at FROM your_table WHERE (to_timestamp(created_at) AT TIME ZONE 'America/Los_angeles')::time BETWEEN '20:00:00' AND '20:59:59';
这种写法直观易懂,::time会剥离日期和时区信息,只保留时分秒,BETWEEN能精准框定20点整到20点59分59秒的区间。
方法二:用Extract函数精准判断小时
如果你更习惯用extract函数,可以直接指定小时为20——因为只要小时是20,就意味着时间处于20:00-20:59:59之间,刚好符合需求:
SELECT created_at FROM your_table WHERE EXTRACT(hour FROM to_timestamp(created_at) AT TIME ZONE 'America/Los_angeles') = 20;
验证你提供的示例数据:
- 1526528788转换为PST是
2018-05-16 20:06:28,符合条件; - 1526442388转换为PST是
2018-05-15 20:06:28,也符合条件;
其余记录转换后的小时不在20范围内,不会被选中,和你的期望结果完全匹配。
内容的提问来源于stack exchange,提问作者KY Leung
相关产品推荐
相关产品推荐

