使用时区选择前一天的数据

时间:2018-02-16 01:49:12

标签: sql psql

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

查询应选择mytable中前一天的每条记录。

mytable包含timetimestamp 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中的最佳实践是什么?如何编写此查询?任何解释都会有所帮助

1 个答案:

答案 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';