15位的身份证号提取出生日期的问题?急用,在线等

llh6795 2009-08-06 03:33:43
update ryjbqk set f_csrq= '19'+substring(f_sfzh,7,6) where len(f_sfzh)=15




服务器: 消息 8115,级别 16,状态 2,行 1
将 expression 转换为数据类型 datetime 时发生算术溢出错误。
语句已终止。


18位的提取没有问题,怎么15的提示有错,请指点,谢谢
...全文
396 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
llh6795 2009-08-07
  • 打赏
  • 举报
回复
再次谢谢楼上的热心朋友们

找出不合法的都是当年没有2月29号

19750229
19590229
feixianxxx 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 llh6795 的回复:]
引用 17 楼 sdhdy 的回复:
SQL code--用isdate()检查出生日期不合格的。select*from  ryjbqkwhereisdate('19'+ltrim(substring(f_sfzh,7,6))) <>1andlen(f_sfzh)=15



谢谢了,你这个方法真好用,找出来两条不合法的
[/Quote]

呵呵 找出问题所在 GX
sdhdy 2009-08-06
  • 打赏
  • 举报
回复
恭喜.^_^
llh6795 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sdhdy 的回复:]
SQL code--用isdate()检查出生日期不合格的。select*from ryjbqkwhereisdate('19'+ltrim(substring(f_sfzh,7,6)))<>1andlen(f_sfzh)=15
[/Quote]


谢谢了,你这个方法真好用,找出来两条不合法的
sdhdy 2009-08-06
  • 打赏
  • 举报
回复
select  isdate('19'+'800503')
--1
select isdate('19'+'801303')
--0
feixianxxx 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 llh6795 的回复:]
引用 15 楼 feixianxxx 的回复:
引用 14 楼 llh6795 的回复:
字段没有问题
f_csrq 是datetime
f_sfzh 是字符

你看下 f_sfzh 字段的这个身份证号码 substring(f_sfzh,7,6) 这里 是不是出现不合法的出生日期了
比如 891311 -》13月 891288-》 88日 这个类型


非常感谢,因为是几千条记录,刚加条件就过了,问题是出在个别号有问题,等会结贴
[/Quote]
是号码问题 吧 也许某些不合法的
sdhdy 2009-08-06
  • 打赏
  • 举报
回复
--用isdate()检查出生日期不合格的。
select * from ryjbqk
where isdate('19'+ltrim(substring(f_sfzh,7,6)))<>1 and len(f_sfzh)=15
llh6795 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 feixianxxx 的回复:]
引用 14 楼 llh6795 的回复:
字段没有问题
f_csrq 是datetime
f_sfzh 是字符

你看下 f_sfzh 字段的这个身份证号码 substring(f_sfzh,7,6) 这里 是不是出现不合法的出生日期了
比如 891311 -》13月 891288-》 88日 这个类型
[/Quote]

非常感谢,因为是几千条记录,刚加条件就过了,问题是出在个别号有问题,等会结贴
feixianxxx 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 llh6795 的回复:]
字段没有问题
f_csrq 是datetime
f_sfzh 是字符
[/Quote]
你看下 f_sfzh 字段的这个身份证号码 substring(f_sfzh,7,6) 这里 是不是出现不合法的出生日期了
比如 891311 -》13月 891288-》 88日 这个类型
llh6795 2009-08-06
  • 打赏
  • 举报
回复
字段没有问题
f_csrq 是datetime
f_sfzh 是字符
feixianxxx 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 llh6795 的回复:]
是的,还是不行
[/Quote]
你哪个字段转换出问题了?
update ryjbqk
set f_csrq= convert(datetime,'19'+substring(f_sfzh,7,6), 112)
where len(f_sfzh)=15
这里 f_csrq 这个应该是datetime字段吧
f_sfzh 这个是字符字段吧
llh6795 2009-08-06
  • 打赏
  • 举报
回复
补充:SQL2000
llh6795 2009-08-06
  • 打赏
  • 举报
回复
是的,还是不行
feixianxxx 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 llh6795 的回复:]
谢谢大家,用了大家的方法,还是提示

服务器: 消息 8115,级别 16,状态 2,行 1
将 expression 转换为数据类型 datetime 时发生算术溢出错误。
语句已终止。
[/Quote]
8楼的不行?
feixianxxx 2009-08-06
  • 打赏
  • 举报
回复
declare @s varchar(20)
set @s='19990909'
select CONVERT(datetime,@s,112)
-----------------------
1999-09-09 00:00:00.000
llh6795 2009-08-06
  • 打赏
  • 举报
回复
谢谢大家,用了大家的方法,还是提示

服务器: 消息 8115,级别 16,状态 2,行 1
将 expression 转换为数据类型 datetime 时发生算术溢出错误。
语句已终止。
feixianxxx 2009-08-06
  • 打赏
  • 举报
回复
update  ryjbqk  
set f_csrq= convert(datetime,'19'+substring(f_sfzh,7,6), 112)
where len(f_sfzh)=15
sdhdy 2009-08-06
  • 打赏
  • 举报
回复
--或者
update ryjbqk set f_csrq= '19'+ltrim(substring(f_sfzh,7,6))
where len(f_sfzh)=15
jeansy911 2009-08-06
  • 打赏
  • 举报
回复
把语句写完整吧。
--小F-- 2009-08-06
  • 打赏
  • 举报
回复
update  ryjbqk  set f_csrq=cast( ('19'+substring(f_sfzh,7,6)) as datetime)  where len(f_sfzh)=15
加载更多回复(3)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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