选择前一天的时区数据

Selecting previous day's data with timezone

我有一个每天太平洋标准时间午夜执行的 psql 查询。

查询应该select前一天的每条记录在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 中的最佳实践是什么?应该如何编写此查询?任何解释都会有所帮助

您的减去 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';