问题描述
- 关于oracle中日期比较出现问题
- select a.* 2 if_dj_check
from v_sj_corp a
where exists
(select 1
from t_m_corp_corp_stock m t_corp_stock s1
where a.id = m.id
and a.org = m.org
and a.seq_id = m.seq_id
and s1.id = m.sub_id
and s1.org = m.sub_org
and s1.seq_id = m.sub_seq_id
and (
add_months(sysdate(-12*16))<to_date(FUN_GET_BORN_YEAR(s1.certificate_no)'YYYY-MM-DD')
)
)
如上sql中关联,执行就会报ORA-06861 文字与字符串格式不匹配,但是单独将s1.certificate_no修改为某一个固定的字符串就能执行,问题出在哪
解决方案
要么 FUN_GET_BORN_YEAR 有错,要么certificate_no中有错误的日期(比如 YYYY-02-31)。
其实应该在FUN_GET_BORN_YEAR中调用 TO_DATE(),这样可以在 EXCEPTION 中输出出错的 certificate_no。
解决方案二:
先用 select FUN_GET_BORN_YEAR(s1.certificate_no) t_corp_stock s1 看看出来的结果是不是都是yyyy-mm-dd的格式
时间: 2024-12-03 11:52:38