在财务发票中通常在记录金额的同时需要记录其大写形式,如下为金额小写转换为大写形式。
CREATE FUNCTION [dbo].[ufnGetChineseFormat]
(
@money NUMERIC(14,2)
)
RETURNS NVARCHAR(32)
AS
BEGIN
DECLARE @moneyStr NVARCHAR(20) --存储金额的字符形式
,@moneyCHS NVARCHAR(32) --存储金额的中文大写形式
,@flag VARCHAR(1)
,@i INT
SELECT @moneyCHS = CASE WHEN @money > 0 THEN '' ELSE '(负)' END
,@money = ABS(@money)
,@moneyStr = STUFF(STR(@money,15,2),13,1,'') --加前置空格补齐到位(去掉小数点)
,@i = PATINDEX('%[1-9]%',@moneyStr) ----找到金额最高位
WHILE @i >= 1 AND @i <= 14
BEGIN
SET @flag = SUBSTRING(@moneyStr,@i,1)
IF @flag <> '0' OR (SUBSTRING(@moneyStr,@i+1,1) <> '0' AND @i NOT IN(4, 8, 12, 14)) --转换阿拉伯数字为中文大写形式
SET @moneyCHS=@moneyCHS+SUBSTRING('零壹贰叁肆伍陆柒捌玖', @flag+1, 1)
IF @flag <> '0' OR @i IN(4, 8, 12) --添加中文单位
SET @moneyCHS=@moneyCHS+SUBSTRING('仟佰拾亿仟佰拾万仟佰拾元角分',@i,1)
SET @i = @i + 1
END
SET @moneyCHS = REPLACE(@moneyCHS, '亿万', '亿') --当金额为x亿零万时去掉万
if @money = 0
set @moneyCHS = '零元整' --当金额为零时返回'零元整'
if @flag = '0'
set @moneyCHS = @moneyCHS + '整' --当金额末尾为零分时以'整'结尾
RETURN @moneyCHS
END
GO