【问题标题】:Convert Varchar with timezone to Timestamp in Oracle在 Oracle 中将带时区的 Varchar 转换为时间戳
【发布时间】:2020-11-04 13:00:10
【问题描述】:

我在将 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 来做到这一点?

谢谢

【问题讨论】:

  • 为什么将值存储为字符串 - 为什么您的列没有定义为时间戳(使用 [本地] 时区)?

标签: sql oracle datetime timestamp timestamp-with-timezone


【解决方案1】:

请使用以下查询将 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;

【讨论】:

  • 时区转换呢?我的意思是+0700
  • 所有你想用+0700转换的记录?
  • 是的,我需要将所有记录转换为 +0700
  • 你也可以在问题中发布预期的结果吗?
  • 正如您在我之前的预期结果中看到的那样,如果有 +0800 和 +0900 的数据,则小时数会改变 +1 小时和 +2 小时
【解决方案2】:

正如@Jim 所说,您可以使用带有字符文字的to_timestamp_tz() 将字符串转换为时间戳值:

to_timestamp_tz(event_time, 'SYYYY-MM-DD"T"HH24:MI:SSTZH:TZM')

您可以使用at time zone 标准化为+07:00 偏移量:

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<>fiddle

【讨论】:

  • 谢谢亚历克斯,我刚刚找到了答案,我只需要根据地点进行更改。所以我用这个cast(to_timestamp_tz(event_time, 'yyyy-mm-dd"T"hh24:mi:sstzhtzm') at time zone 'Asia/Jakarta' as date)
  • 对于原始字符串和转换而言,使用区域更安全 - 我只是坚持使用您显示的偏移量。是的,转换为日期而不是时间戳很好,因为您没有小数秒。
猜你喜欢
  • 2015-10-07
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 2012-10-07
相关资源
最近更新 更多