首页 > 解决方案 > 在 oracle 中转换时区?

问题描述

是否有一个简单的代码可以将给定的日期/时间转换为还应考虑 DST 的差异时区?我有日期时间值(以 UTC 为单位)和要转换的时区。

我知道这可以通过创建存储过程或函数来完成,但只是检查是否有更简单的方法。

标签: oracletimezone

解决方案


利用:

  • CAST( date_column AS TIMESTAMP )DATE数据类型转换为TIMESTAMP数据类型;
  • FROM_TZ( timestamp_column, 'UTC' )TIMESTAMP数据类型转换为时区的TIMESTAMP WITH TIME ZONE数据类型。UTC
  • timestamp_with_timezone_column AT TIME ZONE 'EUROPE/LONDON'TIMESTAMP WITH TIME ZONE数据类型从一个时区转换为另一种时区。

把所有这些放在一起:

SQL小提琴

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

结果

|            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 |

推荐阅读