• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

norman

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

SQL金额转大写

create function [dbo].[fn_getformatmoney] (@money numeric(14,2))
returns nvarchar(32) as
begin
    declare @money_num nvarchar(20)    --存储金额的字符形式
        , @money_chn nvarchar(32)    --存储金额的中文大写形式
        , @n_chn nvarchar(1), @i int    --临时变量

    select @money_chn=case when @money>=0 then '' else null end
        , @money=abs(@money)
        , @money_num=stuff(str(@money, 15, 2), 13, 1, '')    --加前置空格补齐到位(去掉小数点)
        , @i=patindex('%[1-9]%', @money_num)    --找到金额最高位

    while @i>=1 and @i<=14
    begin
        set @n_chn=substring(@money_num, @i, 1)  
        if @n_chn<>'0' or (substring(@money_num,@i+1,1)<>'0' and @i not in(4, 8, 12, 14))    --转换阿拉伯数字为中文大写形式  
            set @money_chn=@money_chn+substring('零壹贰叁肆伍陆柒捌玖', @n_chn+1, 1)
        if @n_chn<>'0' or @i in(4, 8, 12)    --添加中文单位
            set @money_chn=@money_chn+substring('仟佰拾亿仟佰拾万仟佰拾圆角分',@i,1)    
  
        set @i=@i+1
    end

    set @money_chn=replace(@money_chn, '亿万', '亿')    --当金额为x亿零万时去掉万
    if @money=0 set @money_chn='零圆整'    --当金额为零时返回'零圆整'
    if @n_chn='0' set @money_chn=@money_chn+'整'    --当金额末尾为零分时以'整'结尾

    return @money_chn    --返回大写金额
end
go

posted on 2019-08-14 17:32  strgvi  阅读(443)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3