sql - 甲骨文 SQL : get timezone for a given date

标签 sql oracle date datetime timezone

如何根据以下信息准确确定给定日期(DATE data_type 列)的时区?

a) DATE 列不存储时区信息。

b) 服务器时区是 EST 或 EDT,具体取决于 date light saving 是否生效

c) 当前时区偏移量可以通过 SQL 轻松获取:

SELECT TO_CHAR(SYSTIMESTAMP,'TZH:TZM') FROM DUAL

假设今天(2014 年 11 月 3 日)的时区是 EST,我们如何以编程方式确定给定日期(例如 2014 年 11 月 21 日)的有效时区(即 EST 或 EDT)?

最佳答案

Oracle 支持 IANA time zones .美国东部时区由 “America/New_York” 表示。

您可以使用 FROM_TZTIMESTAMP 值创建一个 TIMESTAMP WITH TIME ZONE。 (如果您从 DATE 开始,那么您应该首先转换为 TIMESTAMP。)

然后您可以将 TO_CHAR'TZH:TZM' 一起使用以获得偏移量,或与 'TZD' 一起使用以获得缩写(例如 EST 或 EDT)。

例如:

SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2014-11-02 00:00:00', 'America/New_York'),'TZD')
FROM DUAL;  -- Output: 'EDT'

SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2014-11-02 00:00:00', 'America/New_York'),'TZH:TZM')
FROM DUAL;  -- Output: '-04:00'

SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2014-11-03 00:00:00', 'America/New_York'),'TZD')
FROM DUAL;  -- Output: 'EST'

SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2014-11-03 00:00:00', 'America/New_York'),'TZH:TZM')
FROM DUAL;  -- Output: '-05:00'

关于sql - 甲骨文 SQL : get timezone for a given date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717247/

相关文章:

php - 按共同好友数搜索 - 好友系统 Mysql PHP

oracle - Oracle 中的 Sybase 等效项

oracle - 在 Oracle 中将表连接到自身

java - 在 Java 7 中处理日期对象和时区

java - 使用 SimpleDateFormat 转换日期时出错

r - 假设所有年份都是非闰年,将一年中的某一天转换为日期

sql - 当使用 SQL 可能存在重复时如何只选择不同的行?

sql - 区 block 链可以存储在SQL甚至noSQL数据库中吗?

sql - 如何列出 INFORMATION_SCHEMA.COLUMNS 中的列?

SQL 加入两次相同的表?