在plsql里执行查询语句提示:数据类型不一致 应为date 却获得了number

在plsql里执行以下语句,提示:数据类型不一致应为date却获得了numberselect*fromxxwherecsrq<>substr(sfzh,7,4)+'-'+... 在plsql里执行以下语句,提示:数据类型不一致 应为date 却获得了number
select * from xx where csrq<>substr(sfzh,7,4)+'-'+substr(sfzh,11,2)+'-'+substr(sfzh,13,2);
展开
 我来答
ribone
推荐于2016-08-02 · 超过32用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:81.8万
展开全部

从你的SQL中,猜想xx.csrq字段应该是Date型的,xx.sfzh可能是存储了日期的字符字段,想从xx.sfzh字段提取出日期再与xx.csrq做比较,如果是这样应该改为以下语句:

select * 
   from xx 
   where csrq <> to_date(substr(sfzh,7,4)||'-'||substr(sfzh,11,2)||'-'||substr(sfzh,13,2),'YYYY-MM-DD')
更多追问追答
追问
谢谢你的热心帮忙!
情况确实如你猜想的,csrq在表中存储出生日期,Date型;zfzh在表中存储身份证号码,Number型。
按照你提供的语句执行后,提示:ora-01858 在要求输入数字处找到非数字字符;
请再帮忙看下怎么调整,谢谢!
追答

ora-01858错误的原因应该是“sfzh”字段的值未必全是常规格式的身份证号码,得找出非常规的身份证号,可以用以下SQL:

select *
   from xx
   where regexp_replace(substr(sfzh,7,4)||substr(sfzh,11,2)||substr(sfzh,13,2),'[0-9]*') is not null
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式