选择时间戳大于时区的位置

时间:2017-07-20 11:28:30

标签: sql postgresql

假设我有这个表结构:

                          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

中为我的参数添加小时数

2 个答案:

答案 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的本地时间戳,这会使事情变得更加简单。