SQL获取汉字首字母

时间:2022-01-27 08:02:05
create function f_GetPy(@str nvarchar(4000))
returns nvarchar(4000)
as
begin
declare @strlen int,@re nvarchar(4000)
declare @t table(chr nchar(1) collate Chinese_PRC_CI_AS,letter nchar(1))
insert into @t(chr,letter)
select '','A' union all select '','B' union all
select '','C' union all select '','D' union all
select '','E' union all select '','F' union all
select '','G' union all select '','H' union all
select '','J' union all select '','K' union all
select '','L' union all select '','M' union all
select '','N' union all select '','O' union all
select '','P' union all select '','Q' union all
select '','R' union all select '','S' union all
select '','T' union all select '','W' union all
select '','X' union all select '','Y' union all
select '','Z'
select @strlen=len(@str),@re=''
while @strlen>0
begin
select top 1 @re=letter+@re,@strlen=@strlen-1
from @t a where chr<=substring(@str,@strlen,1)
order by chr desc
if @@rowcount=0
select @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1
end
return(@re)
end
go

update BY_CustomerContacter Set Initials=upper(substring(dbo.f_GetPy(ContacterName), 1, 1))
update BY_SupplierContacter Set Initials=upper(substring(dbo.f_GetPy(ContacterName), 1, 1))

drop function dbo.f_GetPy

select Initials,ContacterName,Id from BY_CustomerContacter order by Initials asc
select Initials,ContacterName,Id from BY_SupplierContacter order by Initials asc