u011104092
u011104092
采纳率0%
2015-03-26 07:56

关于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修改为某一个固定的字符串就能执行,问题出在哪

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • danielinbiti danielinbiti 6年前

    先用 select FUN_GET_BORN_YEAR(s1.certificate_no) t_corp_stock s1 看看出来的结果是不是都是yyyy-mm-dd的格式

    点赞 评论 复制链接分享
  • Tiger_Zhao Tiger_Zhao 6年前

    要么 FUN_GET_BORN_YEAR 有错,要么certificate_no中有错误的日期(比如 YYYY-02-31)。
    其实应该在FUN_GET_BORN_YEAR中调用 TO_DATE(),这样可以在 EXCEPTION 中输出出错的 certificate_no。

    点赞 评论 复制链接分享

相关推荐