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



我正在解码一个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:不一致的数据类型:预期 - 得到 -">

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

这让我明白了一部分。

我很确定我错过了一些重要的东西,这段代码让我明白了一部分:

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日期,将其转换为可以插入到表中的适当日期。 我做错了什么?

您可能需要强制转换它:

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'

相关内容

最新更新