ORACLE使用OFFSET将DATE转换为具有时区的TIMESTAMP

时间:2014-03-07 08:39:57

标签: sql oracle timestamp-with-timezone

我需要在查询中将DATE值转换为TIMESTAMP WITH TIME ZONE,但是目前我正在获取无效的EF使用的TimeZone区域('Europe / Paris')。

例如,在执行此操作时:

select CAST(FECHA AS TIMESTAMP WITH TIME ZONE) from test;

我目前得到这个输出:

07/03/14 09:22:00,000000000 EUROPE/PARIS

但我需要它像:

07/03/14 09:22:00,000000000 +01:00

知道怎么做到这一点吗?

3 个答案:

答案 0 :(得分:16)

您可以将DATE转换为TIMESTAMP,然后使用FROM_TZ将此时间戳转换为带时区的时间戳:

SQL> SELECT from_tz(CAST (SYSDATE AS TIMESTAMP), '+01:00') tz FROM dual;
TZ
-------------------------------------------------
07/03/14 09:47:06,000000 +01:00

答案 1 :(得分:6)

使用@Vincent Malgrat解决方案,您需要获取TIMEZONE_HOUR,然后格式化以在查询中使用。我不知道是否有机会自动制作它。

我建议你嵌套一些功能。它不是最干净的解决方案,但它对我有用

SELECT TO_TIMESTAMP_TZ(TO_CHAR(CAST(FECHAHORA AS TIMESTAMP WITH TIME ZONE), 'DD-MM-YY HH24:MI:SS TZH:TZM'), 'DD-MM-YY HH24:MI:SS TZH:TZM' )FROM TEST;

结果将类似于

03/03/14 09:58:02,000000000 +01:00

问候!

答案 2 :(得分:-2)

使用     ALTER SESSION SET TIME_ZONE =' +01:00&#39 ;; 在您的SELECT之前