oracle判断字段是否为日期类型
场景:需要从oracle同步增量数据,有的表增量字段是date类型,有的表增量字段是varchar类型
createtime为date类型的情况:
select createtime from gg_test WHERE createtime >SYSDATE - 3 ;
createtime为varchar类型的情况:
select createtime from gg_test WHERE createtime >SYSDATE - 3 ;
SQL 错误 [1861] [22008]: ORA-01861: 文字与格式字符串不匹配
需要判断增量字段是否是日期类型,oracle没有内置的判断日期类型的函数,需要自定义函数实现:
create or replace function is_date(str varchar2) return number as
v_dt date;
begin
v_dt := to_date(str, 'yyyy-mm-dd hh24:mi:ss');
return 0;
exception
when others then
return 1;
END;
是日期类型的情况,返回1:
SELECT dt1,is_date(dt1) AS dt2 from
(
SELECT sysdate AS dt1 FROM dual
) t;
DT1 DT2
2024-12-11 11:00:28.000 1
是日期类型的情况,返回0:
SELECT dt1,is_date(dt1) AS dt2 from
(
SELECT '2024-12-12' AS dt1 FROM dual
) t;
DT1 DT2
2024-12-12 0