輸入含中文字串,輸出各字拼音首字母大寫(非漢字保留原字)。適用於排序、索引、檢索輔助欄位生成。
WHILE LEN(@str) > 0)。LEFT(@str,1),判斷 Unicode 是否落於 CJK 統一漢字區(19968 ~ 40869,即 0x4E00 ~ 0x9FFF)。Chinese_PRC_CS_AS_KS_WS 校對序比較,找到首個 Word >= @Word 的對應拼音首字母。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
Regex 或 Pinyin 庫)或應用層處理。Chinese_PRC_CS_AS_KS_WS 區分大小寫、重音、假名、全半形,確保比較正確。TRANSLATE / JSON 輔助,但核心邏輯仍需映射表。