我的数据库包含时区+04:00 (Europe/Moscow)
,需要在Oracle 11g中将格式为YYYY-MM-DD"T"HH24:MI:SSTZH:TZM
的字符串转换为DATE
数据类型。
换句话说,我有一个字符串2013-11-08T10:11:31+02:00
,我想将其转换为DATE
数据类型(在本地数据库时区+04:00 (Europe/Moscow)
中)。
对于字符串2013-11-08T10:11:31+02:00
,我所需的转换应返回DATE
数据类型,日期为2013-11-08 12:11:31
(即将时间本地时区转换为+04:00 (Europe/Moscow)
)。字符串的时区可能不同,上面字符串中的+02:00
只是示例。
我尝试使用TIMESTAMP
数据类型执行此操作,但时区转换没有成功。
答案 0 :(得分:12)
to_timestamp_tz()
子句的 at time zone
函数可用于将字符串文字转换为值timestamp with time zone
数据类型:
SQL> with t1(tm) as(
2 select '2013-11-08T10:11:31+02:00' from dual
3 )
4 select to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
5 at time zone '+4:00' as this_way
6 , to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
7 at time zone 'Europe/Moscow' as or_this_way
8 from t1
9 /
结果:
THIS_WAY OR_THIS_WAY
----------------------------------------------------------------------------
2013-11-08 12.11.31 PM +04:00 2013-11-08 12.11.31 PM EUROPE/MOSCOW
然后,我们使用cast()
函数生成date
数据类型的值:
with t1(tm) as(
select '2013-11-08T10:11:31+02:00' from dual
)
select cast(to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
at time zone '+4:00' as date) as this_way
, cast(to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
at time zone 'Europe/Moscow' as date) as or_this_way
from t1
This_Way Or_This_Way
------------------------------------------
2013-11-08 12:11:31 2013-11-08 12:11:31
详细了解at time zone子句和to_timestamp_tz()功能。
答案 1 :(得分:7)
SELECT
CAST((FROM_TZ(CAST(timezonefield AS TIMESTAMP),'GMT') AT TIME ZONE 'CET') AS DATE)
FROM table;
将GMT中的时间戳转换为中欧时间的日期
答案 2 :(得分:0)
如果您希望将带有时区的时间戳转换为与“ sysdate”同步的日期,请使用以下命令:
select CAST(to_timestamp_tz('2013-11-08T10:11:31-02:00',
'yyyy-mm-dd"T"hh24:mi:sstzh:tzm') at time zone to_char(systimestamp,
'tzh:tzm') AS DATE)
from dual
答案 3 :(得分:0)
将时间戳记转换为日期:
cast(registrationmaster.Stamp5DateTime as date)> = '05 -05-2018'并且 演员表(registrationmaster.Stamp5DateTime as date)<= '05 -05-2018'