Oracle - 都获取 XML 日期字符串并将其转换为日期

Posted

技术标签:

【中文标题】Oracle - 都获取 XML 日期字符串并将其转换为日期【英文标题】:Oracle - both get XML date string and convert it to date 【发布时间】:2019-12-19 09:25:26 【问题描述】:

我正在解码一个 XML 文件(作为 CLOB 存储在数据库中),并且我想提取一个字段并存储为日期。

如果我选择该字段,我会得到数据:

select xmlquery('declare namespace wx = "http://weather.obsfucate.com/rest-3.4/doc/"; //wx:validDateTime/text()' 
       PASSING XMLTYPE(wx.xml_result) 
       RETURNING CONTENT) as VALID_DATETIME
from OPSADM.WEATHER_XML wx
where DATATYPE = 'DailyObservation'

返回“2019-08-08T08:00:00+00:00”

如果我尝试将其插入到具有 DATE 数据类型的表中,它会给我一个错误:“ORA-00932:不一致的数据类型:预期的 DATE 得到了 -”

所以我尝试转换:

 select to_timestamp_tz ('2019-08-08T08:00:00+00:00', 'yyyy-mm-dd"T"hh24:mi:ssTZH:TZM')  OrigTime
 from dual

返回 '8/8/2019 8:00:00.000000000 AM +00:0'

但如果我尝试将这两者放在一起,请将 to_timestamp_tz 放在我的 xmlquery 周围

select to_timestamp_tz (xmlquery('declare namespace wx = "http://weather.obsfucate.com/rest-3.4/doc/"; //wx:validDateTime/text()' 
       PASSING XMLTYPE(wx.xml_result) 
       RETURNING CONTENT), 'yyyy-mm-dd"T"hh24:mi:ssTZH:TZM') as VALID_DATETIME
from OPSADM.WEATHER_XML wx
where DATATYPE = 'DailyObservation'

它返回一个错误:“ORA-00932:不一致的数据类型:预期 - 得到 -”

所以,它甚至不知道它现在期望什么。

This got me part of the way.

I'm pretty sure I'm missing something important that this shows.,这段代码让我参与其中:

 select cast(to_timestamp_tz ('2019-08-08T08:00:00+00:00', 'yyyy-mm-dd"T"hh24:mi:ssTZH:TZM')
 at time zone 'US/Mountain' as date) as MountainTime
 , to_timestamp_tz ('2019-08-08T08:00:00+00:00', 'yyyy-mm-dd"T"hh24:mi:ssTZH:TZM')  OrigTime
 from dual

我认为这显示了我的时区:

 select sessiontimezone, dbtimezone from dual

返回 -07:00 和 +00:00,我认为数据库是美国山区时间或中部时间。

我想提取 XML 日期,将其转换为可以插入表格的适当日期。我做错了什么?

【问题讨论】:

【参考方案1】:

你可能需要投射它:

select 
  to_timestamp_tz (CAST(xmlquery('declare namespace wx = "http://weather.obsfucate.com/rest-3.4/doc/"; //wx:validDateTime/text()' 
  PASSING XMLTYPE(wx.xml_result) 
  RETURNING CONTENT) AS VARCHAR2(100)), 'yyyy-mm-dd"T"hh24:mi:ssTZH:TZM') as VALID_DATETIME
from OPSADM.WEATHER_XML wx
where DATATYPE = 'DailyObservation'

【讨论】:

哦!我有另一种方式(我添加了更多我尝试过的代码)。我会试试看。 那行得通。除了,它的时间是上午 8:00,我怀疑我确实需要将它转换为美国山地时间。我更近了!

以上是关于Oracle - 都获取 XML 日期字符串并将其转换为日期的主要内容,如果未能解决你的问题,请参考以下文章

js判断时间是不是大于指定时间

如何获取 ADLS Gen2 文件的最后修改日期并将其保存到 python 中的 csv

如何从今天的日期获取下个月的日期并将其插入我的数据库中?

Iphone:如何将年份添加到当前日期并将其作为字符串返回,格式为 2011-11-20

将oracle日期分配给SSIS变量

Oracle过程增加字符串数据类型并将其存储为表中的列之一