选择前一天的时区数据
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';
我有一个每天太平洋标准时间午夜执行的 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';