首页 > 解决方案 > 选择缩写时区

问题描述

我正在尝试编写一个查询来返回给定区域的当前缩写时区。如...

“美国/纽约” “美国/洛杉矶”

我希望将这些转换为...

'EDT' 'PDT'

我可以使用本地时区来做到这一点

select TO_CHAR(CAST(SYSDATE AS TIMESTAMP WITH LOCAL TIME ZONE),'TZD') from dual;

返回“PDT”。但我需要它来返回任何地区的时区。希望有类似...

select TO_CHAR(CAST(SYSDATE AS TIMESTAMP AT TIME ZONE 'America/Los_Angeles'),'TZD') from dual;

但甲骨文不喜欢这种语法。知道如何得到它吗?

标签: oracletimezonetimestamp-with-timezone

解决方案


AT TIME ZONE是时间戳修饰符,不属于CAST表达式。

因此:

select to_char(cast(sysdate as timestamp) at time zone 'America/Los_Angeles', 'TZD')
from dual;

或更简单:

select to_char(systimestamp at time zone 'America/Los_Angeles', 'TZD') from dual;

这是获取所有当前时区的查询:

select distinct tzname, to_char(systimestamp at time zone tzname, 'TZD') as zone
from v$timezone_names
order by tzname;

推荐阅读