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

Sql 选择时间戳大于时区的位置,sql,postgresql,Sql,Postgresql,假设我有这个表结构: Table "test" Column | Type | Modifiers ----------------+-----------------------------+----------- uuid | uuid | not null created | timestam

假设我有这个表结构:

                          Table "test"
     Column     |            Type             | Modifiers
----------------+-----------------------------+-----------
 uuid           | uuid                        | not null
 created        | timestamp without time zone | not null
在某个日期之后,我将如何选择记录?但也有特定时区的因素吗

由于创建的
是没有区域的时间戳,我们可以假定它是
UTC

查询示例:

从创建的测试中选择uuid>=“2017-07-20”


这将返回2017-07-20 00:00:00.000 UTC当天或之后发生的所有事件
我如何查询2017-07-20 00:00:00.000 GMT+2之后发生的事件?不必在
created>arg

中为我的参数添加小时,我认为一种方法是比较表中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的本地时间戳,这将使事情变得更简单。

我想这是不可能的。@Arijit您应该在几乎100%确定的情况下才这样说:-)是的,这就是我们正在做的。然而,有人让我对一些东西进行数据挖掘,我完全忘记了
创建的
是UTC时间戳,客户想要在某个日期(GMT+2)之后发生的东西。但是谢谢你的回答,伙计!我会试试:)谢谢你发这个帖子。Postgres文档中没有这样的东西可以在一个地方写出来。太棒了!我喜欢postgres,因为它很容易阅读实际的sql:)如果我们想要几分钟或几小时范围内的东西,比如“2019-09-11 00:12:01”和“2019-09-11 20:12:01”,会发生什么情况?好的,这对我来说很有用:从某个表中选择任何列,其中时间列>2019-09-11 00:12:01::时间戳和时间列<'2019-09-11 20:12:01'::时间戳
select uuid
from test
where created > '2017-07-20'::timestamp with time zone at time zone '+02';