我有一个应用程序通过以下方式上传到Oracle Data数据类型列:
TO_TIMESTAMP_TZ('2012-10-09 1:10:21 CST','YYYY-MM-DD HH24:MI:SS TZR')
Run Code Online (Sandbox Code Playgroud)
我现在需要从此数据列中提取以下格式和时区:'YYYY-MM-DD HH24:MI:SS CDT'
注意:日期是在CST上传的,但需要在CDT中返回.
我有谷歌,但只发现以下数据类型:
SELECT dateColumn From dateTable;
09-NOV-12
SELECT TO_CHAR(dateColumn,'YYYY-MM-DD HH24:MI:SS') From dateTable;
2012-10-09 1:10:21
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下内容:
TO_TIMESTAMP_TZ(dateColumn,'YYYY-MM-DD HH24:MI:SS CDT')
data format not recognized
TO_TIMESTAMP_TZ(CRTE_DT,'YYYY-MM-DD HH24:MI:SS TZH:TZM')
09-NOV-12 1:10:21 AM +01:00
don't understand why this does not come back as YYYY-MM-DD?
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
一些上下文:数据库是Oracle.我试图在表的每一行创建一个分隔的字符串.分隔字符串的某些值必须来自CLOB(包含XML).某些行上的CLOB可能为null,这就是问题所在.
例如,我有一个表:'Item',其中包含以下行:'Item_ID','Item_CD','Item_TXT'(CLOB).该表有两行.一行在'Item_TXT'中存储以下XML,另一行'Item_TXT'为空.
<OuterTag>
<InnerTag>test</InnerTag>
</OuterTag>
Run Code Online (Sandbox Code Playgroud)
我创建了以下SQL来返回分隔字符串的前3个元素:
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
FROM Item;
Run Code Online (Sandbox Code Playgroud)
这成功地运作:
项%#12345%#A
项%#123456%#A
然后我尝试添加第4个元素(来自CLOB的值).
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item;
Run Code Online (Sandbox Code Playgroud)
这失败并出现以下错误:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
我已将此问题缩小到有时Item_TXT为null且XMLTYPE()无法处理此问题.为证明这一点,我运行了以下内容:
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item
WHERE Item_TXT IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
这成功地运作:
项%#12345%#A#%测试
是否有任何方法可以处理整个表,如果可用则从clob中提取值,否则将null/nothing添加到分隔的字符串中?