使用Oracle 11g获取非Date值的值

时间:2018-02-01 15:16:02

标签: oracle oracle11g

我表中的两列是insertDate和ModifiedDate bothare NOT date数据类型但是varchar。 当我查询表格时,我将奇怪的字符插入到日期列中,类似于//此时此刻。下次它可能是别的东西。 我不想深入了解这个价值是如何得到的......这很复杂。

我现在需要的是使用Oracle 11g从这两列中查询这些值吗?类似的东西:

 Select insertDate,ModifiedDate 
 from mytable
 where IsDate(insertDate ) <> 'NO' OR IsDate(ModifiedDate) <> 'NO'

是否有类似inOracle 11g的功能可以帮助我获取那些非日期值?

1 个答案:

答案 0 :(得分:1)

您可以根据to_date创建一个功能,然后使用它来检查您的值:

create or replace function checkDate(v in varchar2) return varchar2 is
    d date;
begin
    d :=to_date(v, 'FXMM/DD/YYYY');
    return 'OK';
exception
    when others then
        return 'KO';    
end;

它的作用:

with test(col) as (
    select '11/30/2017' from dual union all
    select '11/30//2017' from dual union all
    select '11-30-2017' from dual union all
    select '11/30/17' from dual
)    
select col, checkDate(col)
from test

给出:

COL         CHECKDATE 
----------- ----------
11/30/2017  OK        
11/30//2017 KO        
11-30-2017  KO        
11/30/17    KO