当前位置: 代码迷 >> Sql Server >> 从请问Sql语句从18位身份证号生成出生日期
  详细解决方案

从请问Sql语句从18位身份证号生成出生日期

热度:58   发布时间:2016-04-27 14:26:26.0
从请教Sql语句从18位身份证号生成出生日期
mssql2008express中
update baseinfo set chushengriqi=
convert(datetime,
''''+
+substring(CONVERT(char(4),shenfenzhenghao),7,4)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),11,2)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),13,2)+''''
)
where ShenFenZhengHao is not null
and len(ShenFenZhengHao)=18
老提示:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

为什么呢?或者还有什么更简单的办法?

------解决方案--------------------
为什么不指中间那段SELECT出来看看是什么结果呢?
''''+
+substring(CONVERT(char(4),shenfenzhenghao),7,4)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),11,2)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),13,2)+''''
------解决方案--------------------
不用substring来substring去了。

直接取了那8位数,直接可以转成时间类型了。
------解决方案--------------------
加一个isdate识别一下,去除无效的数据
SQL code
update baseinfo set chushengriqi = substring(shenfenzhenghao,7,4) + '-'+ substring(shenfenzhenghao,11,2) + '-'+ substring(shenfenzhenghao,13,2)where where ShenFenZhengHao is not nulland len(ShenFenZhengHao)=18and isdate(substring(shenfenzhenghao,7,4) + '-'+ substring(shenfenzhenghao,11,2) + '-'+ substring(shenfenzhenghao,13,2)) = 1