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