在oracle中将带时区的varchar转换为时间戳

mwngjboj  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(704)

我在将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来做呢?
谢谢

bvpmtnay

bvpmtnay1#

请使用下面的查询将varchar转换为时间戳 to_timestamp_tz 然后再次使用将其转换为所需的时间格式 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;

![](https://i.stack.imgur.com/D02KH.png)
krugob8w

krugob8w2#

正如@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')

db<>小提琴

相关问题