如何在SQL Server中通过T-SQL函数将西里尔文转换为拉丁文?
T-SQL自定义函数:西里尔文转拉丁文转换
我之前在网上搜了一圈,确实没找到现成的T-SQL解决方案来做西里尔文到拉丁文的转换,所以自己写了个函数,亲测能用,分享给大家。
这个函数的核心思路是通过字符映射替换来处理常见的西里尔字符,包括带变音符号的特殊字符,尽可能覆盖常用的转换场景:
函数代码
CREATE OR ALTER FUNCTION dbo.CyrillicToLatin ( @InputString NVARCHAR(MAX) ) RETURNS NVARCHAR(MAX) AS BEGIN -- 基础小写字符映射 SET @InputString = REPLACE(@InputString, N'а', N'a'); SET @InputString = REPLACE(@InputString, N'б', N'b'); SET @InputString = REPLACE(@InputString, N'в', N'v'); SET @InputString = REPLACE(@InputString, N'г', N'g'); SET @InputString = REPLACE(@InputString, N'д', N'd'); SET @InputString = REPLACE(@InputString, N'е', N'e'); SET @InputString = REPLACE(@InputString, N'ё', N'yo'); SET @InputString = REPLACE(@InputString, N'ж', N'zh'); SET @InputString = REPLACE(@InputString, N'з', N'z'); SET @InputString = REPLACE(@InputString, N'и', N'i'); SET @InputString = REPLACE(@InputString, N'й', N'y'); SET @InputString = REPLACE(@InputString, N'к', N'k'); SET @InputString = REPLACE(@InputString, N'л', N'l'); SET @InputString = REPLACE(@InputString, N'м', N'm'); SET @InputString = REPLACE(@InputString, N'н', N'n'); SET @InputString = REPLACE(@InputString, N'о', N'o'); SET @InputString = REPLACE(@InputString, N'п', N'p'); SET @InputString = REPLACE(@InputString, N'р', N'r'); SET @InputString = REPLACE(@InputString, N'с', N's'); SET @InputString = REPLACE(@InputString, N'т', N't'); SET @InputString = REPLACE(@InputString, N'у', N'u'); SET @InputString = REPLACE(@InputString, N'ф', N'f'); SET @InputString = REPLACE(@InputString, N'х', N'h'); SET @InputString = REPLACE(@InputString, N'ц', N'ts'); SET @InputString = REPLACE(@InputString, N'ч', N'ch'); SET @InputString = REPLACE(@InputString, N'ш', N'sh'); SET @InputString = REPLACE(@InputString, N'щ', N'sch'); SET @InputString = REPLACE(@InputString, N'ъ', N''); SET @InputString = REPLACE(@InputString, N'ы', N'y'); SET @InputString = REPLACE(@InputString, N'ь', N''); SET @InputString = REPLACE(@InputString, N'э', N'e'); SET @InputString = REPLACE(@InputString, N'ю', N'yu'); SET @InputString = REPLACE(@InputString, N'я', N'ya'); -- 大写字符映射 SET @InputString = REPLACE(@InputString, N'А', N'A'); SET @InputString = REPLACE(@InputString, N'Б', N'B'); SET @InputString = REPLACE(@InputString, N'В', N'V'); SET @InputString = REPLACE(@InputString, N'Г', N'G'); SET @InputString = REPLACE(@InputString, N'Д', N'D'); SET @InputString = REPLACE(@InputString, N'Е', N'E'); SET @InputString = REPLACE(@InputString, N'Ё', N'Yo'); SET @InputString = REPLACE(@InputString, N'Ж', N'Zh'); SET @InputString = REPLACE(@InputString, N'З', N'Z'); SET @InputString = REPLACE(@InputString, N'И', N'I'); SET @InputString = REPLACE(@InputString, N'Й', N'Y'); SET @InputString = REPLACE(@InputString, N'К', N'K'); SET @InputString = REPLACE(@InputString, N'Л', N'L'); SET @InputString = REPLACE(@InputString, N'М', N'M'); SET @InputString = REPLACE(@InputString, N'Н', N'N'); SET @InputString = REPLACE(@InputString, N'О', N'O'); SET @InputString = REPLACE(@InputString, N'П', N'P'); SET @InputString = REPLACE(@InputString, N'Р', N'R'); SET @InputString = REPLACE(@InputString, N'С', N'S'); SET @InputString = REPLACE(@InputString, N'Т', N'T'); SET @InputString = REPLACE(@InputString, N'У', N'U'); SET @InputString = REPLACE(@InputString, N'Ф', N'F'); SET @InputString = REPLACE(@InputString, N'Х', N'H'); SET @InputString = REPLACE(@InputString, N'Ц', N'Ts'); SET @InputString = REPLACE(@InputString, N'Ч', N'Ch'); SET @InputString = REPLACE(@InputString, N'Ш', N'Sh'); SET @InputString = REPLACE(@InputString, N'Щ', N'Sch'); SET @InputString = REPLACE(@InputString, N'Ъ', N''); SET @InputString = REPLACE(@InputString, N'Ы', N'Y'); SET @InputString = REPLACE(@InputString, N'Ь', N''); SET @InputString = REPLACE(@InputString, N'Э', N'E'); SET @InputString = REPLACE(@InputString, N'Ю', N'Yu'); SET @InputString = REPLACE(@InputString, N'Я', N'Ya'); RETURN @InputString; END;
使用示例
创建好函数之后,就可以直接调用了:
-- 转换小写西里尔文 SELECT dbo.CyrillicToLatin(N'привет мир'); -- 输出: privet mir -- 转换混合大小写内容 SELECT dbo.CyrillicToLatin(N'ПриВет МИР'); -- 输出: PriVet MIR -- 转换带特殊变音符号的内容 SELECT dbo.CyrillicToLatin(N'ёж щука'); -- 输出: yozh schuka
注意事项
- 这个函数覆盖了标准俄语西里尔字符的转换,如果需要支持其他斯拉夫语言的西里尔字符(比如乌克兰语、保加利亚语的特殊字符),可以自行添加对应的
REPLACE语句。 - 对于一些罕见的变音符号字符,可能需要额外补充映射规则来适配。
内容的提问来源于stack exchange,提问作者Przemyslaw Remin
相关产品推荐
相关产品推荐

