Postgresql Postgres sql时区
我尝试返回特定时区的值,但我遇到了一些奇怪的行为:Postgresql Postgres sql时区,postgresql,Postgresql,我尝试返回特定时区的值,但我遇到了一些奇怪的行为: SELECT created_at AT TIME ZONE 'US/Pacific' - created_at, NOW() AT TIME ZONE 'US/Pacific' - NOW(), NOW() now FROM "my_table" ORDER by id DESC LIMIT 1 返回 10:00:00 | -10:00:00 | 2017-08-02 17:36:30.660477+03
SELECT created_at AT TIME ZONE 'US/Pacific' - created_at,
NOW() AT TIME ZONE 'US/Pacific' - NOW(),
NOW() now FROM "my_table"
ORDER by id DESC LIMIT 1
返回
10:00:00 | -10:00:00 | 2017-08-02 17:36:30.660477+03
为什么同一个函数为表中的列和动态时间返回相反的值(-10/+10)
谢谢 类型
不带时区的时间戳
被解释为“本地时区”。因此,您在时区“US/Pacific”创建的
值将作为给定时区的时间戳
虽然NOW()
返回带有时区的时间戳
,因此时区“US/Pacific”的NOW()值必须转换为不同的时区
见文件:
编辑
试试这个:
SELECT created_at AT TIME ZONE 'US/Pacific' AS crated_at_us_pacific, created_at,
NOW() AT TIME ZONE 'US/Pacific' AS now_us_pacific, NOW() AS now
FROM "my_table"
ORDER by id DESC
LIMIT 1
感谢宫本美吉的澄清,它让我走上了正轨
如果字段时间戳在时区中没有时区,则定义特定时区。因此,首先声明localtime,然后将其转换为特定时区:因此固定SQL是:
SELECT created_at AT TIME ZONE 'localtime' AT TIME ZONE 'US/Pacific' - created_at,
NOW() AT TIME ZONE 'US/Pacific' - NOW(),
NOW() now FROM "my_table"
ORDER by id DESC LIMIT 1
编辑
更动态
SELECT created_at::timestamptz AT TIME ZONE 'US/Pacific' - created_at,
NOW() AT TIME ZONE 'US/Pacific' - NOW(),
NOW() now FROM "my_table"
ORDER by id DESC LIMIT 1
首先timestamtz
将时间转换为本地时区,然后再转换为时区“美国/太平洋”所需的时区
在创建的列是什么类型的?在创建的列是没有时区的时间戳,不要在标题中添加“已解决”。如果Usagi的答案解决了您的问题,请接受答案。否则这个问题仍然“悬而未决”。将答案从SELECT created_at TIME'US/Pacific'时区为…
更改为SELECT created_at TIME'localtime'时区为…
。在此之后,我将其标记为有用SELECT
语句的目的是显示值不同的原因,而不是给出如何解决的建议,因为您的问题是“为什么”。。。