ora-01861的错误

zhuyaowei 2007-11-05 01:36:27
我想从人员信息表中,根据身份证号提取人员的出生日期。可是在更新记录的时候,总是出错:
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

...全文
1350 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyaowei 2007-11-05
  • 打赏
  • 举报
回复
to_char(to_date(substr(shenfenzheng,7,8),'YYYY-MM-DD'),'yyyy-mm-dd')

本身是没有问题的。

我select查询了,数据是‘1981-11-13’的格式
说明这个转换没有错啊。

zhuyaowei 2007-11-05
  • 打赏
  • 举报
回复

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)=18

1 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转换成功了啊。
所以应该不存在你说的这种情况。


不过我按照你说的试了一下,发现错误变了,我现在怀疑是数据不规范的问题。

只是几万条数据,不好找啊。
谢谢了先,还有什么好办法吗?
ruihuahan 2007-11-05
  • 打赏
  • 举报
回复
直接
set chushengrq = substr(shenfenzheng,7,8)
ruihuahan 2007-11-05
  • 打赏
  • 举报
回复
substr(shenfenzheng,7,8)
从shengfenzheng取出来的只有八个字符的长度,而你的格式字符串却有10个字符,当然不匹配了。

'YYYY-MM-DD ====〉'YYYYMMDD'
zhuyaowei 2007-11-05
  • 打赏
  • 举报
回复
update renyuan
set chushengrq=to_char(to_date(substr(shenfenzheng,7,8),'YYYY-MM-DD'),'yyyy-mm-dd')
where lengthb(shenfenzheng)=18

我这样写也是同样的错误啊。

ruihuahan 2007-11-05
  • 打赏
  • 举报
回复
我的数据表中出生日期字段是字符型 chushengrq=to_date(....

chshengrq是字符型,就不要用to_date了,这样数据类型就不匹配了。
zhuyaowei 2007-11-05
  • 打赏
  • 举报
回复
up
怎么没人回答呢?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧