假设我有这个表结构:
Table "test"
Column | Type | Modifiers
----------------+-----------------------------+-----------
uuid | uuid | not null
created | timestamp without time zone | not null
如何在特定日期之后选择记录?但也是特定时区的因素?
由于created
是没有区域的时间戳,我们可以假设UTC
示例查询:
select uuid from test where created >= '2017-07-20'
这将返回发生在2017-07-20 00:00:00.000 UTC
之后或之后发生的所有事件。如何在2017-07-20 00:00:00.000 GMT+2
之后查询发生的事件?无需在created > arg
答案 0 :(得分:4)
select uuid
from test
where created > '2017-07-20'::timestamp with time zone at time zone '+02';
答案 1 :(得分:0)
我认为一种方法是比较表中UTC时间戳与其他输入之间的纪元以来的秒数:
select uuid
from test
where
extract(epoch from created) >
extract(epoch from timestamp with time zone
'2017-07-19 23:59:59.999'::timestamp with time zone at time zone 'GMT')
上面的语法很冗长,编写此查询的方式可能更短。作为一般规则,当您发现自己跳过箍来回答简单查询时,可能意味着您需要更改您的设计。如果您以UTC格式存储时间戳并从应用程序运行查询,则可能会传入已转换为UTC的本地时间戳,这会使事情变得更加简单。