Sql Server使用函数获取拼音码

复制代码
CREATE FUNCTION Fun_GetPY
(
@Str NVARCHAR(4000)
)
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @Word NCHAR(1)
DECLARE @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)
SET @Str = RIGHT(@Str, LEN(@Str) - 1)
END
RETURN @PY
END

-- 使用
update dbo.Dict_Medicine set PyCode = [dbo].[Fun_GetPY](MedicineName)  where ID = 1 ;
复制代码
  • 这个的缺点就是不能够识别多音字。只能做简单的识别,其实还是不太建议使用此方法
  • 使用函数而不使用存储过程的原因是函数可以在 Select 语句钟执行。而存储过程不行。存储过程可以返回多个参数,函数只能返回一个。
posted @   雨V幕  阅读(131)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示