在 SQL Server 中若需將中文字轉為拼音首字母(如排序、檢索),可透過純 T-SQL 純量函數實現,無需 CLR 或外部元件。以下函數 fun_getPY 接收 NVARCHAR 字串,逐字判斷 Unicode 範圍,對漢字查表對應首字母,非漢字原樣保留。
CREATE FUNCTION fun_getPY
(
@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)
-- 判斷是否為常用漢字區段 (19968~40869)
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
函數利用 Unicode 碼位範圍判斷是否為漢字,再以內嵌的拼音分界字對照表(按拼音順序排列的代表字),透過 COLLATE Chinese_PRC_CS_AS_KS_WS 進行二分查找式比對,取得首字母。非漢字字元直接保留。適用於中文排序、簡拼檢索等場景。