我有一个名为created_at
存储在 UTC 中没有时区的数据的列,例如:2017-02-05 15:43:27.151
我想以特定格式转换为其他时区,如 CET:
2017-02-08 16:43:27 +01:00
我成功将时间转换为特定时区,但需要指定输入的时区。查询看起来像:
SELECT created_at,
(created_at AT TIME ZONE 'UTC') AT TIME ZONE 'CET' AS cet
FROM my_table;
[
{
"created_at" : "2017-02-08 15:43:27.151",
"cet" : "2017-02-08 16:43:27.151"
}
]
但我未能从时区代码中提取或生成时区偏移量。
我试过了
SELECT EXTRACT(TIMEZONE_HOUR
FROM
(SELECT '2017-02-08 15:43:27.151' AT TIME ZONE 'CET'));
[
{
"date_part" : 0
}
]
如何获得2017-02-08 16:43:27 +01:00
?
编辑 1:
SHOW timezone; --utc
SELECT current_timestamp; -- 2017-02-09 11:00:20.225039+00
SELECT to_char(current_timestamp AT TIME ZONE 'CET', 'YYYY-MM-DD HH24:MI:SS OF'); -- 2017-02-09 12:00:35 +00
为什么偏移量是 00?(我使用OF
是因为我在 Redshift 上)?
的 | 与 UTC 的偏移量;仅对 TIMESTAMPTZ 有效
来自文档
编辑2:我想把AT TIME ZONE 'CET'
日期改成timestamptz,但我错了。您需要转换日期,::timestamptz
然后OF
将显示 UTC 偏移量。
SELECT to_char((current_timestamp AT TIME ZONE 'CET')::timestamptz, 'YYYY-MM-DD HH24:MI:SS OF');
--2017-02-09 14:48:48 +01
现在我需要添加:00
.
搜索 Redshift 文档后:
我终于做到了:
时间戳需要转换为预期的时区
AT TIME ZONE ...
,然后使用时区进行转换,否则OF
将不会显示 UTC 偏移量。我
:00
在验证时区无法显示带有分钟的时区后添加: