根据身份证 判断性别

oracle里面用法:

select case mod(substr('330621198608064536', 17, 1),2)
when 0 then
'女'
else
'男'
end from dual

select trim('先' from '唐先生') from dual 今天用了一下trim发现只去除左边和右边的汉字

select ltrim('865858585','86') from dual

select rtrim('865858585','85') from dual

sqlserver:



update tbl set sex=CASE right(IDNum,1)%2 when 0 then '女' else '男' end where len(IDNum)=15
update tbl set sex=CASE SubString(IDNum,17,1)%2 when 0 then '女' else '男' end where len(IDNum)=18

写个函数处理字符串: 根据身份证号码把出生年月日填充上
create function getresult(@sfz varchar(20))
returns varchar(10)
as
begin
declare @result datetime,@csrq varchar(10)
@csrq=(case when len(@sfz)=18 then substring(@sfz,7,8) else '19'+substring(@sfz,7,6) end)
set @result=left(@csrq,4)+'-'+substring(@csrq,5,2)+'-'+right(@csrq,2)
return @result
end

语句:
update tablename set birthday=dbo.getresult(sfz)

--粗放计算,只考虑了年度,没有考虑月份和日期
--身份证已经考虑了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值