財務系統常需將數字金額轉為中文大寫 (壹貳參肆伍陸柒捌玖拾佰仟萬億)。本文提供完整預存程序 AtoC 程式碼與核心邏輯解析。
@String4。@J 從右對齊單位字串 @String2 = '萬仟佰拾億仟佰拾萬仟佰拾元角分'。@String1 = '零壹貳參肆伍陸柒捌玖') + 對應單位。CREATE PROCEDURE AtoC
@ChangeMoney MONEY
AS
SET NOCOUNT ON
DECLARE @String1 CHAR(20) = '零壹貳參肆伍陸柒捌玖'
DECLARE @String2 CHAR(30) = '萬仟佰拾億仟佰拾萬仟佰拾元角分'
DECLARE @String4 VARCHAR(100) = CAST(@ChangeMoney * 100 AS INT)
DECLARE @J INT = LEN(@String4)
DECLARE @String2Adj VARCHAR(30) = RIGHT(@String2, @J)
DECLARE @i INT = 1
DECLARE @Zero INT = 0
DECLARE @ReturnValue VARCHAR(100) = ''
DECLARE @String3 CHAR(1), @Ch1 VARCHAR(10), @Ch2 VARCHAR(10)
WHILE @i <= @J
BEGIN
SET @String3 = SUBSTRING(@String4, @i, 1)
IF @String3 <> '0'
BEGIN
SET @Ch1 = SUBSTRING(@String1, CAST(@String3 AS INT) + 1, 1)
SET @Ch2 = SUBSTRING(@String2Adj, @i, 1)
SET @Zero = 0
END
ELSE
BEGIN
IF (@Zero = 0) OR (@i = @J - 9) OR (@i = @J - 5) OR (@i = @J - 1)
SET @Ch1 = '零'
ELSE
SET @Ch1 = ''
SET @Zero = @Zero + 1
SET @Ch2 = ''
-- 億/萬 邊界
IF @i = @J - 10 BEGIN SET @Ch2 = '億'; SET @Zero = 0 END
IF @i = @J - 6 BEGIN SET @Ch2 = '萬'; SET @Zero = 0 END
END
SET @ReturnValue = @ReturnValue + @Ch1 + @Ch2
SET @i = @i + 1
END
-- 移除首尾多餘「零」
SET @ReturnValue = REPLACE(@ReturnValue, '零零', '零')
IF LEFT(@ReturnValue, 1) = '零' SET @ReturnValue = SUBSTRING(@ReturnValue, 2, 100)
IF RIGHT(@ReturnValue, 1) = '零' SET @ReturnValue = LEFT(@ReturnValue, LEN(@ReturnValue)-1)
SELECT @ReturnValue AS ChineseAmount
GO
EXEC AtoC 1234567.89
-- 結果:壹佰貳拾叁萬肆仟伍佰陸拾柒元捌角玖分
EXEC AtoC 1000000.00
-- 結果:壹佰萬圓整 (需後處理「元」→「圓」、「角分」為零時補「整」)
@String2 單位字串 (兆、京、垓...)。dbo.fn_MoneyToChinese 內聯呼叫。