我有一个包含以下示例数据的列。该列的数据类型为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;
由于记录AO0102,JAN 31,FEB 01,我认为ORA-01843
被抛出。
如何忽略那些抛出ORA-01843并且只格式化那些可以在纯SQL select语句中格式化的记录的记录(可能只显示其原始值)?
答案 0 :(得分:1)
使用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
但作为一般性评论,您应避免将日期信息存储在表格中作为文本。您现在看到了避免这种情况的原因之一。