函数-SQL-获取中文的缩写字母(案例)

98 阅读1分钟

CREATE function [dbo].[fun_getPY](@str nvarchar(4000))     
returns nvarchar(4000)     
as     
begin     
/*处理空格*/
WHILE (CHARINDEX(' ', @str) > 0)
BEGIN
SET @str = REPLACE(@str, ' ', '')
END
/*处理tab*/
WHILE (CHARINDEX('    ', @str) > 0)
BEGIN
SET @str = REPLACE(@str, '    ', '')
END

declare  @word   nchar(1),@PY nvarchar(4000)     
set   @PY=''     
while   len(@str)>0     
begin     
set   @word=left(@str,1)    

--如果非汉字字符,返回原字符     
set   @PY=@PY+(case   when   unicode(@word)   between   19968   and   19968+20901     
then   (       
select   top   1   PY       
from       
(       
select   'A'   as   PY,N'驁'   as   word     
union   all   select   'B',N'簿'     
union   all   select   'C',N'錯'     
union   all   select   'D',N'鵽'     
union   all   select   'E',N'樲'     
union   all   select   'F',N'鰒'     
union   all   select   'G',N'腂'     
union   all   select   'H',N'夻'     
union   all   select   'J',N'攈'     
union   all   select   'K',N'穒'     
union   all   select   'L',N'鱳'     
union   all   select   'M',N'旀'     
union   all   select   'N',N'桛'     
union   all   select   'O',N'漚'     
union   all   select   'P',N'曝'     
union   all   select   'Q',N'囕'     
union   all   select   'R',N'鶸'     
union   all   select   'S',N'蜶'     
union   all   select   'T',N'籜'     
union   all   select   'W',N'鶩'     
union   all   select   'X',N'鑂'     
union   all   select   'Y',N'韻'     
union   all   select   'Z',N'咗'     
)   T       
where   word>=@word   collate   Chinese_PRC_CS_AS_KS_WS       
order   by   PY   ASC     
)       
else   @word
end)
if(len(@PY)>= 64 ) break;    
set   @str=right(@str,len(@str)-1)
end      
return   @PY
END


GO