將 MONEY 型別金額轉為中文大寫 (如 1234.56 → 壹仟貳佰叁拾肆元伍角陸分)。
CREATE PROCEDURE AtoC
@ChangeMoney MONEY
AS
BEGIN
SET NOCOUNT ON
DECLARE @StrNum CHAR(20) = '零壹貳參肆伍陸柒捌玖'
DECLARE @StrUnit CHAR(30) = '萬仟佰拾億仟佰拾萬仟佰拾元角分'
DECLARE @NumStr VARCHAR(100) = CAST(@ChangeMoney * 100 AS INT) -- 轉分為整數
DECLARE @Len INT = LEN(@NumStr)
DECLARE @UnitStr VARCHAR(30) = RIGHT(@StrUnit, @Len) -- 對齊單位
DECLARE @Result VARCHAR(100) = ''
DECLARE @i INT = 1, @ZeroCount INT = 0
DECLARE @ChNum CHAR(1), @ChUnit CHAR(1)
WHILE @i <= @Len
BEGIN
DECLARE @Digit CHAR(1) = SUBSTRING(@NumStr, @i, 1)
IF @Digit <> '0'
BEGIN
SET @ChNum = SUBSTRING(@StrNum, CAST(@Digit AS INT) + 1, 1)
SET @ChUnit = SUBSTRING(@UnitStr, @i, 1)
SET @ZeroCount = 0
END
ELSE
BEGIN
-- 處理連續零:只在關鍵位 (億/萬/元/個位) 輸出一個「零」
IF @ZeroCount = 0 OR @i = @Len - 9 OR @i = @Len - 5 OR @i = @Len - 1
SET @ChNum = '零'
ELSE
SET @ChNum = ''
SET @ZeroCount = @ZeroCount + 1
SET @ChUnit = ''
-- 關鍵單位位強制輸出單位並重置零計數
IF @i = @Len - 10 BEGIN SET @ChUnit = '億'; SET @ZeroCount = 0 END
IF @i = @Len - 6 BEGIN SET @ChUnit = '萬'; SET @ZeroCount = 0 END
IF @i = @Len - 2 BEGIN SET @ChUnit = '元'; SET @ZeroCount = 0 END
IF @i = @Len BEGIN SET @ChUnit = ''; SET @ZeroCount = 0 END -- 分位
END
SET @Result = @Result + @ChNum + @ChUnit
SET @i = @i + 1
END
SELECT @Result AS ChineseAmount
END
EXEC AtoC 123456.78 -- 輸出: 壹拾貳萬叁仟肆佰伍拾陸元柒角捌分
CREATE FUNCTION fn_MoneyToChinese) 方便 SELECT 直接呼叫。@StrUnit 加入「兆、京、垓」等單位並調整關鍵位判斷邏輯。