首页 > 解决方案 > 在特定时间之前获取时间戳的正确语法是什么?

问题描述

我想从数据库中返回所有时间戳,只要它们在制作当天早上 6 点之前。我试图这样做:

SELECT source_created_at AT TIME ZONE 'US/PACIFIC' FROM time_entry
WHERE source_created_at AT TIME ZONE 'US/PACIFIC' < '06:00:00'::time

但收到此错误:

ERROR:  operator does not exist: timestamp without time zone < time without time zone
LINE 2: WHERE source_created_at AT TIME ZONE 'US/PACIFIC' < '06:00:0...

我也尝试过< '06:00:00'TIME'06:00:00;但遇到了同样的错误。我是 SQL 新手,文档在这里没有帮助。

标签: sqlpostgresql

解决方案


您无法将时间戳与时间进行比较。您需要先将时间戳转换为时间:

WHERE (source_created_at AT TIME ZONE 'US/PACIFIC')::time < '06:00:00'::time

从评论中编辑

如果您希望明天早上 6 点之前的所有时间戳在同一时区:

WHERE source_created_at at time zone 'US/PACIFIC'
    < current_date at time zone 'US/PACIFIC' + interval '1 day 6 hour'

推荐阅读