欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Sql Server 数字金额转中文金额 函数

程序员文章站 2022-06-23 19:14:46
在做一些订单金额、合同金额转换的时候,经常会遇到数字转成中文的情况,所以整理了一个数字转中文的函数; ......

  在做一些订单金额、合同金额转换的时候,经常会遇到数字转成中文的情况,所以整理了一个数字转中文的函数;

/*
    说明:数字金额转中文金额
    示例:187.4 转成 壹佰捌拾柒圆肆角整
*/

create function [dbo].[cnumeric](@num numeric(14,2))
    returns nvarchar(100)
begin
    declare @n_data nvarchar(20),@c_data nvarchar(100),@n_str nvarchar(10),@i int
    set @n_data=right(space(14)+cast(cast(abs(@num*100) as bigint) as nvarchar(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( n'零壹贰叁肆伍陆柒捌玖',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( n'仟佰拾亿仟佰拾万仟佰拾圆角分',@i,1)
        if substring(@c_data,len(@c_data)-1,2)= n'亿万'
        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