在 oracle 中转换时区?
Posted
技术标签:
【中文标题】在 oracle 中转换时区?【英文标题】:Converting timezones in oracle? 【发布时间】:2018-08-23 09:24:34 【问题描述】:是否有一个简单的代码可以将给定的日期/时间转换为还应考虑 DST 的差异时区?我有日期时间值(UTC)和要转换的时区。
我知道这可以通过创建存储过程或函数来完成,但只是检查是否有更简单的方法。
【问题讨论】:
Migrating Oracle DATE columns to TIMESTAMP with timezone的可能重复 是的,但是您没有说明要转换到哪个时区,或者您是否希望将其作为查询结果集的一部分,或者您是否正在尝试更改数据输入表格。请编辑您的问题以进一步解释,并包括示例数据和预期结果。 【参考方案1】:用途:
CAST( date_column AS TIMESTAMP )
将DATE
数据类型转换为TIMESTAMP
数据类型;
FROM_TZ( timestamp_column, 'UTC' )
在UTC
时区将TIMESTAMP
数据类型转换为TIMESTAMP WITH TIME ZONE
数据类型。
timestamp_with_timezone_column AT TIME ZONE 'EUROPE/LONDON'
将 TIMESTAMP WITH TIME ZONE
数据类型从一个时区转换为另一个时区。
综合起来:
SQL Fiddle
Oracle 11g R2 架构设置:
CREATE TABLE table_name( date_time ) AS
SELECT DATE '2018-08-23' FROM DUAL UNION ALL
SELECT SYSDATE FROM DUAL UNION ALL
SELECT DATE '2018-12-01' FROM DUAL;
查询1:(也使用TO_CHAR
很好地显示TIMESTAMP
)
SELECT date_time,
TO_CHAR( FROM_TZ( CAST( date_time AS TIMESTAMP ), 'UTC' ) AT TIME ZONE 'EUROPE/LONDON', 'YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM' ) AS london_date_time
FROM table_name
Results:
| DATE_TIME | LONDON_DATE_TIME |
|----------------------|----------------------------------|
| 2018-08-23T00:00:00Z | 2018-08-23T01:00:00.000000+01:00 |
| 2018-08-23T11:20:56Z | 2018-08-23T12:20:56.000000+01:00 |
| 2018-12-01T00:00:00Z | 2018-12-01T00:00:00.000000+00:00 |
【讨论】:
谢谢。这就是我想要的。以上是关于在 oracle 中转换时区?的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 将带有时区的 TIMESTAMP 转换为 DATE