ORACLE 查询:从 Dual 选择 extract(timezone_abbr FROM sysdate at TIME zone 'America/New_York');
有没有办法获取snowflake数据库中的timezone_abbr,类似于我们在ORACLE中所做的?
没有像Oracle那样直接从雪花中提取时区缩写的方法。 但我们可以通过计算两个时区之间的差异来找到它。
SELECT cast(your_column AS TIMESTAMP) yourtimecolumn
,decode(
extract(
hour FROM
convert_timezone('America/New_York', 'UTC',
cast(your_column AS TIMESTAMP)
)
) -
extract(hour FROM cast(your_column AS TIMESTAMP)
),
4, 'EDT', -20, 'EDT', 5, 'EST', -19, 'EST') timezone
FROM your_table
WHERE cast(your_column AS TIMESTAMP) IS NOT NULL
limit 100
上面的查询假设您的时间戳位于美国/纽约,并且它尝试将其转换为 UTC,因为那是全球时区。
转换后,按照通常的方式,如果差异为 4,则时区为 EDT,如果差异为 5,则时区为 EST。
编辑:包括由于 UTC 转换而超过一天的时间
不幸的是,Snowflake 不存储时区信息 - 它只存储与 UTC 的偏移量。
所以 arunb2w 的答案是有效的。您可以通过将
extract
与 tzh
和 tzm
组件一起使用来使其变得更简单。
我只是通过偏移量做到了这一点。对我有用,并且会在 DST 和非 DST 之间移动。下面只输出 -0300 或 +0600 类型的信息。
select to_char(current_timestamp::timestamp_tz,'TZHTZM');