SQL 数字转为中文大写

USE [SPECIAL_BLD]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[get_upper]
(
@num numeric(18,5)
)
RETURNS VARCHAR(500)
AS
BEGIN
DECLARE @n_data VARCHAR(20),@c_data VARCHAR(100),@n_str VARCHAR(10),@i int
SET @n_data=RIGHT(SPACE(14)+CAST(CAST(ABS(@num*100) AS bigint) AS varchar(20)),14)
SET @c_data=''
SET @i=1
WHILE @i<=14
BEGIN
SET @n_str=SUBSTRING(@n_data,@i,1)
IF @n_str<>' '
BEGIN
IF not ((SUBSTRING(@n_data,@i,2)='00') or
((@n_str='0') and ((@i=4) or (@i=8) or (@i=12) or (@i=14))))
SET @c_data=@c_data+SUBSTRING('零壹贰叁肆伍陆柒捌玖',CAST(@n_str AS int)+1,1)
IF not ((@n_str='0') and (@i<>4) and (@i<>8) and (@i<>12))
SET @c_data=@c_data+SUBSTRING('仟佰拾亿仟佰拾万仟佰拾圆角分',@i,1)
IF SUBSTRING(@c_data,LEN(@c_data)-1,2)='亿万'
SET @c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)
END
SET @i=@i+1
END
IF @num<0
SET @c_data='(负数)'+@c_data
IF @num=0
SET @c_data='零圆'
IF @n_str='0'
SET @c_data=@c_data+'整'
RETURN(@c_data)
END
GO

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下SQL函数将金额数字换为大写: ```sql CREATE FUNCTION dbo.ConvertToWords (@NumValue DECIMAL(19, 2)) RETURNS NVARCHAR(4000) AS BEGIN DECLARE @WholePart BIGINT DECLARE @FractionalPart INT DECLARE @Words NVARCHAR(4000) SELECT @WholePart = CONVERT(BIGINT, FLOOR(@NumValue)) SELECT @FractionalPart = CONVERT(INT, (@NumValue - @WholePart) * 100) -- Whole part conversion SELECT @Words = dbo.ConvertNumber(@WholePart) + ' dollars ' -- Fractional part conversion IF @FractionalPart > 0 BEGIN SELECT @Words = @Words + 'and ' + dbo.ConvertNumber(@FractionalPart) + ' cents' END RETURN @Words END GO CREATE FUNCTION dbo.ConvertNumber (@Number BIGINT) RETURNS NVARCHAR(4000) AS BEGIN DECLARE @Units TABLE (UnitName NVARCHAR(10)) DECLARE @Tens TABLE (TenName NVARCHAR(10)) DECLARE @Teens TABLE (TeenName NVARCHAR(10)) INSERT INTO @Units VALUES ('Zero'), ('One'), ('Two'), ('Three'), ('Four'), ('Five'), ('Six'), ('Seven'), ('Eight'), ('Nine') INSERT INTO @Tens VALUES ('Ten'), ('Twenty'), ('Thirty'), ('Forty'), ('Fifty'), ('Sixty'), ('Seventy'), ('Eighty'), ('Ninety') INSERT INTO @Teens VALUES ('Eleven'), ('Twelve'), ('Thirteen'), ('Fourteen'), ('Fifteen'), ('Sixteen'), ('Seventeen'), ('Eighteen'), ('Nineteen') DECLARE @Words NVARCHAR(4000) IF @Number >= 1000000000 BEGIN SELECT @Words = dbo.ConvertNumber(@Number / 1000000000) + ' billion ' SELECT @Number = @Number % 1000000000 END IF @Number >= 1000000 BEGIN SELECT @Words = @Words + dbo.ConvertNumber(@Number / 1000000) + ' million ' SELECT @Number = @Number % 1000000 END IF @Number >= 1000 BEGIN SELECT @Words = @Words + dbo.ConvertNumber(@Number / 1000) + ' thousand ' SELECT @Number = @Number % 1000 END IF @Number >= 100 BEGIN SELECT @Words = @Words + dbo.ConvertNumber(@Number / 100) + ' hundred ' SELECT @Number = @Number % 100 END IF @Number >= 20 BEGIN SELECT @Words = @Words + (SELECT TenName FROM @Tens WHERE (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) = (@Number / 10)) + ' ' SELECT @Number = @Number % 10 END IF @Number > 10 AND @Number < 20 BEGIN SELECT @Words = @Words + (SELECT TeenName FROM @Teens WHERE (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) = (@Number - 10)) + ' ' SELECT @Number = 0 END IF @Number > 0 BEGIN SELECT @Words = @Words + (SELECT UnitName FROM @Units WHERE (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) = @Number) + ' ' END RETURN RTRIM(@Words) END GO ``` 要使用这个函数,你可以像这样调用它: ```sql SELECT dbo.ConvertToWords(12345.67) AS AmountInWords ``` 该函数将返回 "Twelve thousand three hundred forty-five dollars and sixty-seven cents"。 请注意,此示例仅处理最多十亿美元的金额。如果需要处理更大的金额,请根据需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值