我想从人员信息表中,根据身份证号提取人员的出生日期。可是在更新记录的时候,总是出错:
ora-01861 文字与格式字符串不匹配。请大虾们赐教。注:我的数据表中出生日期字段是字符型,跟这个有关系吗?我的sql如下:针对新身份证号:
select shenfenzheng,substr(shenfenzheng,7,8),chushengrq
from renyuan where lengthb(shenfenzheng)=18用select查看数据,都没有问题可是执行更新就出错了:
update renyuan set chushengrq=to_date(substr(shenfenzheng,7,8),'YYYY-MM-DD') where lengthb(shenfenzheng)=18

解决方案 »

  1.   

    我的数据表中出生日期字段是字符型  chushengrq=to_date(....chshengrq是字符型,就不要用to_date了,这样数据类型就不匹配了。
      

  2.   

    update   renyuan   
    set   chushengrq=to_char(to_date(substr(shenfenzheng,7,8),'YYYY-MM-DD'),'yyyy-mm-dd')  
     where   lengthb(shenfenzheng)=18我这样写也是同样的错误啊。
      

  3.   

    substr(shenfenzheng,7,8)
    从shengfenzheng取出来的只有八个字符的长度,而你的格式字符串却有10个字符,当然不匹配了。'YYYY-MM-DD  ====〉'YYYYMMDD'
      

  4.   

     直接
    set chushengrq = substr(shenfenzheng,7,8)
      

  5.   


    select shenfenzheng,substr(shenfenzheng,7,8),chushengrq,
    to_char(to_date(substr(shenfenzheng,7,8),'YYYY-MM-DD'),'yyyy-mm-dd')
    from renyuan where lengthb(shenfenzheng)=181 110107194909272723 19490927 1949-09-27 1949-09-27
    2 110107194610142713 19461014 1946-10-14 1946-10-14
    3 110107194507262717 19450726 1945-07-26 1945-07-26
    这是我select取出来的数据应该可以看到To_char转换成功了啊。
    所以应该不存在你说的这种情况。
    不过我按照你说的试了一下,发现错误变了,我现在怀疑是数据不规范的问题。只是几万条数据,不好找啊。
    谢谢了先,还有什么好办法吗?
      

  6.   

    to_char(to_date(substr(shenfenzheng,7,8),'YYYY-MM-DD'),'yyyy-mm-dd')本身是没有问题的。我select查询了,数据是‘1981-11-13’的格式
    说明这个转换没有错啊。