汉字首字母查询处理用户定义函数

本文介绍两种在SQL中实现汉字到拼音转换的方法。一种是通过创建一个包含拼音对照表的临时表,并利用PATINDEX进行字符串匹配替换;另一种是通过逐字符判断并转换的方法实现。这两种方法均可用于需要拼音处理的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

CREATE FUNCTION f_GetPY(@str nvarchar(4000))
RETURNS nvarchar(4000)
AS
BEGIN
   
DECLARE @py TABLE(
        ch
char(1),
        hz1
nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,
        hz2
nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS)
   
INSERT @py SELECT 'A',N'',N''
   
UNION  ALL SELECT 'B',N'',N'簿'
   
UNION  ALL SELECT 'C',N'',N''
   
UNION  ALL SELECT 'D',N'',N''
   
UNION  ALL SELECT 'E',N'',N''
   
UNION  ALL SELECT 'F',N'',N''
   
UNION  ALL SELECT 'G',N'',N''
   
UNION  ALL SELECT 'H',N'',N''
   
UNION  ALL SELECT 'J',N'',N''
   
UNION  ALL SELECT 'K',N'',N''
   
UNION  ALL SELECT 'L',N'',N''
   
UNION  ALL SELECT 'M',N'',N''
   
UNION  ALL SELECT 'N',N'',N''
   
UNION  ALL SELECT 'O',N'',N''
   
UNION  ALL SELECT 'P',N'',N''
   
UNION  ALL SELECT 'Q',N'',N''
   
UNION  ALL SELECT 'R',N'',N''
   
UNION  ALL SELECT 'S',N'',N''
   
UNION  ALL SELECT 'T',N'',N''
   
UNION  ALL SELECT 'W',N'',N''
   
UNION  ALL SELECT 'X',N'',N''
   
UNION  ALL SELECT 'Y',N'',N''
   
UNION  ALL SELECT 'Z',N'',N''
   
DECLARE @i int
   
SET @i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
   
WHILE @i>0
       
SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),ch)
            ,
@i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
       
FROM @py
       
WHERE SUBSTRING(@str,@i,1) BETWEEN hz1 AND hz2
   
RETURN(@str)
END
GO

 

 

 

 

 

 

 

 

 

-----------------------------------------------------------方法二

 

 

if exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[fGetPy]')   and   xtype   in   (N'FN',   N'IF',   N'TF')) 
 
drop   function   [dbo].[fGetPy] 
 
GO 
  
 
--创建取拼音函数 
  create   function   fGetPy(@Str   varchar(500)=''
 
returns   varchar(500
 
as 
 
begin 
 
declare   @strlen   int,@return   varchar(500),@ii   int 
 
declare   @n   int,@c   char(1),@chn   nchar(1
  
 
select   @strlen=len(@str),@return='',@ii=0 
 
set   @ii=0 
 
while   @ii<@strlen 
 
begin 
 
select   @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1
 
if   @chn>'z' 
 
select   @n   =   @n   +1 
  ,
@c   =   case   chn   when   @chn   then   char(@n)   else   @c   end 
 
from
 
select   top   27   *   from   ( 
 
select   chn   =   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' --because   have   no   'i' 
  union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' --no   'u' 
  union   all   select   '' --no   'v' 
  union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   '' 
 
union   all   select   @chn)   as   a 
 
order   by   chn   COLLATE   Chinese_PRC_CI_AS   
  )  
as   b 
 
else   set   @c='a' 
 
set   @return=@return+@c 
 
end 
 
return(@return
 
end 
  
 
go 
 
--测试 
  select   dbo.fgetpy('东莞市')   as   东莞市,dbo.fgetpy('ab中c国人')   as   中国人 
  
 
--删除拼音函数 
  drop   function   fgetpy

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值