首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

T-SQL 實現漢字轉拼音首字母函數:自訂映射表與 Unicode 範圍判斷

     編輯:關於SqlServer

函數目標

輸入含中文字串,輸出各字拼音首字母大寫(非漢字保留原字)。適用於排序、索引、檢索輔助欄位生成。

核心邏輯

  1. 逐字元迴圈處理(WHILE LEN(@str) > 0)。
  2. 取首字元 LEFT(@str,1),判斷 Unicode 是否落於 CJK 統一漢字區(19968 ~ 40869,即 0x4E00 ~ 0x9FFF)。
  3. 若為漢字,查詢內建映射表:依 Chinese_PRC_CS_AS_KS_WS 校對序比較,找到首個 Word >= @Word 的對應拼音首字母。
  4. 非漢字直接輸出原字元。
  5. 移除已處理字元 SET @str = RIGHT(@str, LEN(@str)-1) 繼續。

完整函數程式碼

CREATE FUNCTION dbo.fn_GetPinyinInitial(@str NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
    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 40869 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;

使用範例

SELECT dbo.fn_GetPinyinInitial(N'上海北京');  -- 輸出:SHBJ
SELECT dbo.fn_GetPinyinInitial(N'測試123');   -- 輸出:CS123

效能與擴充建議

  • 純 T-SQL 迴圈處理長字串效能一般,大量資料建議 CLR 函數(Regex 或 Pinyin 庫)或應用層處理。
  • 映射表僅含 23 個邊界字,覆蓋常用漢字首字母;生僻字可能歸類不準,可補充邊界字。
  • 校對序 Chinese_PRC_CS_AS_KS_WS 區分大小寫、重音、假名、全半形,確保比較正確。
  • SQL Server 2017+ 可考慮 TRANSLATE / JSON 輔助,但核心邏輯仍需映射表。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved