我有一列有下面的示例数据。该列的数据类型为VARCHAR2.。
050211
042911
110428
110428
AO0102
JAN 31
FEB 01当我尝试用以下代码将列记录格式化为可读格式时,我将
ORA-01843 : Not a valid month
SELECT to_char(to_date(TRIM(MyColumn), 'YYMMDD'), 'MM/DD/YYYY') FROM MyTable;我相信ORA-01843被抛出是因为AO0102的记录,1月31日,2月1日。
我怎么能忽略那些抛出ORA-01843并只格式化那些可以用纯文本select语句格式化的记录(并且可能只是显示它的原始值)?
发布于 2018-04-11 10:56:33
使用CASE表达式检查列的状态,并且仅有条件地尝试将其解析为有效日期:
SELECT
MyColumn,
CASE WHEN REGEXP_LIKE(MyColumn, '^\s*\d\d\d\d\d\d\s*$')
THEN TO_CHAR(TO_DATE(TRIM(MyColumn), 'YYMMDD'), 'MM/DD/YYYY')
ELSE MyColumn END AS new_col
FROM MyTable但是,作为一般性评论,您应该避免将日期信息作为文本存储在表中。您现在看到了避免这种情况的原因之一。
https://stackoverflow.com/questions/49773170
复制相似问题