【问题标题】:How to get all data post midnight of different timezone?如何获取不同时区午夜后的所有数据?
【发布时间】:2021-01-19 01:46:51
【问题描述】:

我有一个名为 testing 的 PostgreSQL 表,其中一列名为 creation_timetimestamp with time zone。数据库时区为UTC

现在我想根据时区“America/New_York”获取时间大于当天 00:00 的所有行。

我知道如何在当地时间午夜之后获取所有行:

SELECT * FROM testing
WHERE  ( creation_time >= now()::date)
ORDER BY id DESC

但是如何在不同的时区使用这个查询呢?

【问题讨论】:

    标签: sql postgresql timezone


    【解决方案1】:

    假设 “当天” 也是由纽约时间定义的,而不是由当前时区设置。

    SELECT *
    FROM   testing
    WHERE  creation_time >= date_trunc('day', now() AT TIME ZONE 'America/New_York') AT TIME ZONE 'America/New_York'
    ORDER  BY id DESC;
    

    是的,AT TIME ZONE 'America/New_York' 两次。没有错字。

    now() AT TIME ZONE 'America/New_York') 获取纽约当地时间。 date_trunc 获取当天的 00:00。第二个AT TIME ZONE 'America/New_York' 将本地时间转换回timestamptz,我们最终进行比较。

    如果您想要 本地 日期的 NY 00:00,则更简单:

    WHERE  creation_time >= CURRENT_DATE::timestamp AT TIME ZONE 'America/New_York'
    

    时间相同,但可以是不同的一天!

    CURRENT_DATE 是本地日期(日期根据当前会话的时区设置)。实际上与now()::date 相同。

    进一步阅读:

    【讨论】:

    • 什么是current_date
    • 谢谢,这样的事情很难知道
    • @Santhosh:我在上面的CURRENT_DATE 上加了一点。
    • WHERE creation_time >= CURRENT_DATE::timestamp AT TIME ZONE 'America/New_York' -- 我不明白这会做什么
    • @Santhosh:就像我说的那样,它计算您当地日期的 NY 00:00(不是当前的 NY 日期,可能提前一天或落后一天)。
    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 2010-09-27
    • 2021-09-23
    • 2013-04-05
    • 2018-12-15
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多