我使用以下sql将日期/时间值从一个时区转换为另一个时区
from_tz(cast(to_date(to_char(q.created_date, 'DDMMYYYY:HH24:MI:SS'),
'DDMMYYYY:HH24:MI:SS') as timestamp), 'Europe/London') at time zone 'America/New_York'
else null end as Message_Rcd_Date_Time
以上输出如下:
29-OCT-2016 14:28:16.000000 -04:00
我想要做的是输出这个日期/时间,如下所示,不包括时区,你能告诉我为了达到这个目的我需要改变什么吗?
29-OCT-2016 14:28:16
答案 0 :(得分:0)
不确定Oracle,但在查询之下可以提供帮助。
SELECT SUBSTR((cast(to_date(to_char(q.created_date, 'DDMMYYYY:HH24:MI:SS'),
'DDMMYYYY:HH24:MI:SS') as timestamp), 'Europe/London') , 1, 20) at time zone 'America/New_York'
else null end as Message_Rcd_Date_Time;
如果它只是SQL Server LEFT
函数就可以了。
答案 1 :(得分:0)
首先让我们解散你的表达
FROM_TZ(CAST(TO_DATE(TO_CHAR(q.created_date, 'DDMMYYYY:HH24:MI:SS'), 'DDMMYYYY:HH24:MI:SS') AS TIMESTAMP), 'Europe/London') AT TIME ZONE 'America/New_York'
确实如下:
TO_CHAR(q.created_date, 'DDMMYYYY:HH24:MI:SS')
- >将created_date
值转换为VARCHAR2
TO_DATE(..., 'DDMMYYYY:HH24:MI:SS')
- >将其转换回DATE
CAST(... AS TIMESTAMP)
- >将其转换为TIMESTAMP
(不带时区)FROM_TZ(..., 'Europe/London')
- >附上时区'欧洲/伦敦'对它... AT TIME ZONE 'America/New_York'
- >转换为时区' America / New_York' 第1,2和3点没用!由于created_date
是TIMESTAMP
,您可以缩短
TO_CHAR(FROM_TZ(q.created_date, 'Europe/London') AT TIME ZONE 'America/New_York', 'DD-MON-YYYY HH24:MI:SS')
如果您的SESSIONTIMEZONE
为Europe/London
,您甚至可以
TO_CHAR(q.created_date AT TIME ZONE 'America/New_York', 'DD-MON-YYYY HH24:MI:SS')