sql根据身份证计算年龄。

来源:百度知道 编辑:UC知道 时间:2024/06/14 14:24:36
求sql语句一条。
如:字段nl 字段 sfz

要求。把计算的结果写入nl(年龄字段)

UPDATE 表 set nl=()
后面计算不来了。

--粗放计算,只考虑了年度,没有考虑月份和日期
--身份证已经考虑了15位和18位的情况
--准备测试数据
declare @T table(nl int,sfz varchar(18))
insert into @T
select 0,'324532198103080654'
union all
select 0,'431324741127075'
select * from @T
--更新操作
update @T
set nl = case when len(ltrim(rtrim(sfz))) = 18 then cast(Year(GetDate()) as int)- cast(substring(ltrim(rtrim(sfz)),7,4) as int)
else cast(Year(GetDate()) as int)- cast('19'+substring(ltrim(rtrim(sfz)),7,2) as int) end
From @T
--显示结果
select * from @T

没有试过,随手写的,仅供参考,不知道可不可行。

update a set a.nl=(year(getdate()) - cast((select substring(b.sfz,6,4) from person b where b.sfz=a.sfz) as int)) from person a