我在将varchar转换为DateTime / timestamp时遇到问题。 就是这种情况
ID EVENT_TIME(Varchar)
1 2020-04-12T09:25:53+0800
2 2020-04-12T09:25:53+0700
3 2020-04-12T09:25:53+0900
我想返回的所有时间戳都转换为+0700
ID EVENT_TIME(Datetime)
1 2020-04-12 10:25:53
2 2020-04-12 09:25:53
3 2020-04-12 11:25:53
这可能吗?以及如何使用oracle来做到这一点?
谢谢
答案 0 :(得分:2)
请在下面的查询中使用to_timestamp_tz
将varchar转换为时间戳,并再次使用to_char
将其转换为所需的时间格式
select ID, to_char(to_timestamp_tz(EVENT_TIME, 'YYYY-MM-DD"T"HH24:MI:SS.FF TZH:TZM'), 'YYYY-MM-DD HH24:MI:SS') as event_date from table_name;
示例:
select to_char(to_timestamp_tz('2020-04-12T09:25:53+0800', 'YYYY-MM-DD"T"HH24:MI:SS.FF TZH:TZM'), 'YYYY-MM-DD HH24:MI:SS') as event_date from dual;
答案 1 :(得分:0)
正如@Jim所说,您可以将to_timestamp_tz()
与字符文字一起使用,以将字符串转换为时间戳值:
to_timestamp_tz(event_time, 'SYYYY-MM-DD"T"HH24:MI:SSTZH:TZM')
要归一化为+07:00偏移量,可以使用at time zone
:
to_timestamp_tz(event_time, 'SYYYY-MM-DD"T"HH24:MI:SSTZH:TZM') at time zone '+07:00'
如果您不想保留时区部分,可以将其转换为普通时间戳:
cast(
to_timestamp_tz(event_time, 'SYYYY-MM-DD"T"HH24:MI:SSTZH:TZM') at time zone '+07:00'
as timestamp)
或者您可以cast (... as date)
,因为您没有小数秒。
或者您可以将其转换回显示的字符串:
to_char(
to_timestamp_tz(event_time, 'SYYYY-MM-DD"T"HH24:MI:SSTZH:TZM') at time zone '+07:00',
'SYYYY-MM-DD HH24:MI:SS')