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