PostgreSQL使用Unix时间戳查询DATE列返回异常数据,求排查原因
SQL查询返回不符合预期记录的原因与修复
你的问题出在时间戳转date类型的截断操作上:
- 你用
to_timestamp(1660346076)得到的是Fri Aug 12 2022 23:14:36 GMT+0000,但加上::date后,这个时间会被截断为当天的起始时刻——2022-08-12 00:00:00 +00:00。 - 此时你的查询条件实际变成了
updated_at >= '2022-08-12 00:00:00 +00:00',那条2022-08-12 22:59:07.625179 +00:00的记录自然满足这个条件,所以被返回。
修复方法
如果要筛选严格晚于等于原始时间戳对应时刻的记录,直接去掉::date转换即可:
select * from car c where c.updated_at >= to_timestamp(1660346076)
如果你确实需要按日期维度筛选,要明确你的时间范围逻辑(比如筛选8月12日全天的记录,或8月13日及以后),避免无意识的时间截断。
内容的提问来源于stack exchange,提问作者zumzum
相关产品推荐
相关产品推荐

