我表中的两列是insertDate和ModifiedDate bothare NOT date数据类型但是varchar。 当我查询表格时,我将奇怪的字符插入到日期列中,类似于//此时此刻。下次它可能是别的东西。 我不想深入了解这个价值是如何得到的......这很复杂。
我现在需要的是使用Oracle 11g从这两列中查询这些值吗?类似的东西:
Select insertDate,ModifiedDate
from mytable
where IsDate(insertDate ) <> 'NO' OR IsDate(ModifiedDate) <> 'NO'
是否有类似inOracle 11g的功能可以帮助我获取那些非日期值?
答案 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