我有一个psql查询,每天在太平洋标准时间午夜执行。
查询应选择mytable
中前一天的每条记录。
mytable
包含time
列timestamp with timezone
,时区是标准UTC
这两个查询
select * from mytable WHERE timezone('US/Pacific', time) >= timezone('US/Pacific', now() - '24 hour')
select * from mytable WHERE timezone('US/Pacific', time) >= timezone('US/Pacific', now()) - '24 hour'
抛出错误:
ERROR: invalid input syntax for type timestamp with time zone: "24 hour"
LINE 1: ...' , time ) >= timezone ( 'US/Pacific' , now ( ) - '24 hour' ...
包含以下语法的查询是否适用于时区?
... WHERE time >= TIMESTAMP 'yesterday' AND time < TIMESTAMP 'today'
psql中的最佳实践是什么?如何编写此查询?任何解释都会有所帮助
答案 0 :(得分:1)
您的24小时减法语法已关闭。它应该是这样的:
timezone('US/Pacific', now() - interval '24 hour')
^^^ ^^^
完整查询:
SELECT *
FROM mytable
WHERE timezone('US/Pacific', time) >= timezone('US/Pacific', now() - interval '24 hour')
请注意,由于WHERE
子句中的两个术语都被转移到相同的时区,因此应该可以在Postgres内部存储的(默认)UTC时间中对它们进行比较:
SELECT *
FROM mytable
WHERE time >= now() - interval '24 hour';