免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
人民幣小寫金額轉(zhuǎn)大寫

人民幣小寫金額轉(zhuǎn)大寫

分類: SQL函數(shù)分享系列 1170人閱讀 評論(4) 收藏 舉報

--1、人民幣小寫金額轉(zhuǎn)大寫(第一版)

====================================================================

-- Title: 人民幣小寫金額轉(zhuǎn)大寫

-- Author: dobear        Mail(MSN): dobear_0922@hotmail.com

-- Environment: Vista + SQL2005

-- Date: 2008-06-12

-- Remark: dobear原創(chuàng),轉(zhuǎn)載請注明出處,有問題請發(fā)Mail告之

-- ====================================================================

go

--創(chuàng)建函數(shù)

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>=then '' else '()' end

        , @money=abs(@money)

        , @money_num=stuff(str(@money, 15, 2), 13, 1, '')    --加前置空格補齊到位(去掉小數(shù)點)

        , @i=patindex('%[1-9]%', @money_num)    --找到金額最高位

 

    while @i>=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))    --轉(zhuǎn)換阿拉伯數(shù)字為中文大寫形式   

            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=set @money_chn='零圓整'    --當金額為零時返回'零圓整'

    if @n_chn='0' set @money_chn=@money_chn+''    --當金額末尾為零分時以''結(jié)尾

 

    return @money_chn    --返回大寫金額

end

go

--測試示例

select dbo.fn_getformatmoney(4545.44)

--運行結(jié)果

/*

肆仟伍佰肆拾伍圓肆角肆分

*/

 

--2、人民幣小寫金額轉(zhuǎn)大寫(第二版)

/*編寫者:(博客天地www.inbaidu.com )

創(chuàng)建時間:

功能:小寫金額轉(zhuǎn)換成大寫

參數(shù):@LowerMoney 小寫金額加上小數(shù)點最長可以保留位

輸出:大寫金額

簡介:SQL版小寫金額轉(zhuǎn)換成大寫金額(最多可以精確到小數(shù)點四位)

注: Decimal 數(shù)據(jù)類型最多可存儲個數(shù)字

轉(zhuǎn)載:請保留以上信息,謝謝?。?!

********************************************************/

go

--創(chuàng)建函數(shù)

create function [dbo].[lowertoupper](@lowermoney decimal(38,4))

returns varchar(200)    --返回的大寫金額的字符

as

begin

      declare @lowerstr  varchar(50)    --小寫金額

      declare @upperstr  varchar(200)  --大寫金額

      declare @uppertmp  varchar(15)    --大寫金額的臨時字符串

      declare @i          int            --遞增量

      declare @lowerlen  int            --小寫金額的總長度

 

      set @lowerstr = @lowermoney --decimal型的值全部賦給字符串變量注:(賦值過去的話如在字符串變量中是顯示.0000 因為小數(shù)位精確到四位,沒有的話,它會自動補)

      set @lowerstr = replace(@lowerstr,'.','') --把小數(shù)點替換成空字符    --精確到小數(shù)點的四位角分厘毫

 

      set @lowerlen = len(@lowerstr) --獲取小寫金額的總長度(包括四個小數(shù)位)

      select @i = 1,@upperstr = '',@uppertmp = '' --設(shè)置默認初始值

 

      while @i <= @lowerlen         

          begin

            set @uppertmp = case

                                  when substring(@lowerstr,@lowerlen - @i + 1,1) = '0' and @i = 5 and (convert(int,right(@lowerstr,4)) = 0 or@lowerlen > 5) then ''      --注:如果個位為的話,并且四位小數(shù)都是或者它的長度超過(也就是超過元),則為元

                                  --when substring(@lowerstr,@lowerlen - @i + 1,1) = '0' then ''

                                  else

                                      + case substring(@lowerstr,@lowerlen - @i + 1,1) --看當前位是數(shù)字幾,就直接替換成漢字繁體大寫

                                              when '0' then ''

                                              when '1' then ''

                                              when '2' then ''

                                              when '3' then ''

                                              when '4' then ''

                                              when '5' then ''

                                              when '6' then ''

                                              when '7' then ''

                                              when '8' then ''

                                              when '9' then ''

                                        end

                                      + case @i

                                              when 1      then ''

                                              when 2      then ''

                                              when 3      then ''

                                              when 4      then ''

                                              when 5      then ''

                                              when 9      then ''

                                              when 13      then ''

                                              when 17      then ''

                                              when 21      then ''

                                              when 25      then ''

                                              when 29      then '' 

                                              when 33      then ''

                                              when 37      then '' --decimal型最大長度是后面的就不用再考慮了

                                              else

                                                  + case @i%4

                                                          when 2 then ''      --10 14 18 22 26 30 34 38 …………

                                                          when 3 then ''      --11 15 19 23 27 31 35 39 …………

                                                          when 0 then ''      --12 16 20 24 28 32 36 40 …………

                                                      end

                                        end

                            end

            set @upperstr = isnull(@uppertmp,'') + isnull(@upperstr,'')

            set @i = @i + 1

          end

      if convert(int,right(@lowerstr,4)) = 0 set @upperstr = left(@upperstr,len(@upperstr)-8) + '' --判斷小數(shù)位數(shù)是不是都是,是就可以取整

      while patindex('%[仟佰拾角分厘毫零]%',@upperstr) <> 0    --把零拾或零佰或零零變成一個零

          begin

            set @upperstr = stuff(@upperstr,patindex('%[仟佰拾角分厘毫零]%',@upperstr),2,'')

          end

      while patindex('%[溝穰杼垓京兆億萬][溝穰杼垓京兆億萬]%',@upperstr) <> 0 --把零萬或零億的清空掉

          begin

            select @upperstr = stuff(@upperstr,patindex('%[溝穰杼垓京兆億萬][溝穰杼垓京兆億萬]%',@upperstr)+1,2,'')

          end

      while patindex('%[仟佰拾][溝穰杼垓京兆億萬]%',@upperstr) <> 0 --把類似拾零萬或佰零萬或仟零萬中間的零清空掉

          begin

            select @upperstr = stuff(@upperstr,patindex('%[仟佰拾][溝穰杼垓京兆億萬]%',@upperstr)+1,1,'')

          end

      if patindex('%_[]%',@upperstr) <> 0 --把類似拾零元或百零元中間的零清空掉

          begin

            select @upperstr = stuff(@upperstr,patindex('%_[]%',@upperstr) + 1,1,'')

  end

      else if (patindex('[]%',@upperstr) <> 0) and (convert(int,right(@lowerstr,4)) <> 0) --判斷當前否是零元開頭,并且后面的四個小數(shù)不為

              begin

          select @upperstr = stuff(@upperstr,patindex('[]%',@upperstr),2,'') --把零元清空掉

        end

      if right(@upperstr,1) = '' set @upperstr = left(@upperstr,len(@upperstr)-1)      --如果最后一位是零也清空掉

      if @upperstr = '元整' set @upperstr = '' + @upperstr                            --如果只是的話,就顯示零元整

      return @upperstr      --返回大寫金額

end 

 

--測試示例

Select dbo.LowerToUpper(120000000) --壹億貳仟萬元整

Select dbo.LowerToUpper(102000000) --壹億零貳佰萬元整

Select dbo.LowerToUpper(100200000) --壹億零貳拾萬元整

Select dbo.LowerToUpper(100020000) --壹億零貳萬元整

Select dbo.LowerToUpper(100002000) --壹億貳仟元整

 

--運行結(jié)果

/*

壹億貳仟萬元整

壹億零貳佰萬元整

壹億零貳拾萬元整

壹億零貳萬元整

壹億貳仟元整

*/

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
判斷字符串中只包含或不包含某種字符的方法
談?wù)凷QL數(shù)據(jù)庫中濫用臨時表、排序的解決方案優(yōu)化(舉例:漢字轉(zhuǎn)拼音函數(shù))
SQlserver 創(chuàng)建函數(shù)實現(xiàn)只取某個字段的數(shù)字部分
SQL Server CHARINDEX和PATINDEX詳解
精妙SQL語句
加載宏的應(yīng)用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服