日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql server 数字转大写

發布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql server 数字转大写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自http://blog.csdn.net/tlammon/article/details/51068654

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

--====================================================================
-- Title: 人民幣小寫金額轉大寫
-- Author: dobear ? ? ? ?Mail(MSN): dobear_0922@hotmail.com
-- Environment: Vista + SQL2005
-- Date: 2008-06-12
-- Remark: dobear原創,轉載請注明出處,有問題請發Mail告之
--- ====================================================================
?USE [HMSH]
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--創建函數
alter 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 N'(負)' 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'零壹貳叁肆伍陸柒捌玖', @n_chn+1, 1)
? ? ? ? if @n_chn<>'0' or @i in(4, 8, 12) ? ?--添加中文單位
? ? ? ? ? ? set @money_chn=@money_chn+substring(N'仟佰拾億仟佰拾萬仟佰拾圓角分',@i,1) ? ??
? ?
? ? ? ? set @i=@i+1
? ? end
?
? ? set @money_chn=replace(@money_chn, N'億萬', N'億') ? ?--當金額為x億零萬時去掉萬
? ? if @money=0 set @money_chn=N'零圓整' ? ?--當金額為零時返回'零圓整'
? ? if @n_chn='0' set @money_chn=@money_chn+N'整' ? ?--當金額末尾為零分時以'整'結尾
?
? ? return @money_chn ? ?--返回大寫金額
end
go
--測試示例
--select dbo.fn_getformatmoney(4545.44)
--運行結果
/*
肆仟伍佰肆拾伍圓肆角肆分
*/
?
--2、人民幣小寫金額轉大寫(第二版)
/*編寫者:(博客天地www.inbaidu.com )
創建時間:
功能:小寫金額轉換成大寫
參數:@LowerMoney 小寫金額加上小數點最長可以保留位
輸出:大寫金額
簡介:SQL版小寫金額轉換成大寫金額(最多可以精確到小數點四位)
注: Decimal 數據類型最多可存儲個數字
轉載:請保留以上信息,謝謝!!!
********************************************************/
?USE [HMSH]
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--創建函數
Alter function [dbo].[lowertoupper](@lowermoney decimal(38,4))
returns nvarchar(200) ? ?--返回的大寫金額的字符
as
begin
? ? ? declare @lowerstr nvarchar(50) ? ?--小寫金額
? ? ? declare @upperstr ?nvarchar(200) ?--大寫金額
? ? ? declare @uppertmp ?nvarchar(15) ? ?--大寫金額的臨時字符串
? ? ? declare @i ? ? ? ? ?int ? ? ? ? ? ?--遞增量
? ? ? declare @lowerlen ?int ? ? ? ? ? ?--小寫金額的總長度
?
? ? ? set @lowerstr = @lowermoney --把decimal型的值全部賦給字符串變量注:(賦值過去的話如在字符串變量中是顯示.0000 因為小數位精確到四位,沒有的話,它會自動補)
? ? ? set @lowerstr = replace(@lowerstr,'.','') --把小數點替換成空字符 ? ?--精確到小數點的四位角分厘毫
?
? ? ? set @lowerlen = len(@lowerstr) --獲取小寫金額的總長度(包括四個小數位)
? ? ? select @i = 1,@upperstr = '',@uppertmp = '' --設置默認初始值
?
? ? ? 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 N'元' ? ? ?--注:如果個位為的話,并且四位小數都是或者它的長度超過(也就是超過元),則為元
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --when substring(@lowerstr,@lowerlen - @i + 1,1) = '0' then ''
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + case substring(@lowerstr,@lowerlen - @i + 1,1) --看當前位是數字幾,就直接替換成漢字繁體大寫
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '0' then N'零'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '1' then N'壹'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '2' then N'貳'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '3' then N'叁'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '4' then N'肆'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '5' then N'伍'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '6' then N'陸'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '7' then N'柒'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '8' then N'捌'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when '9' then N'玖'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + case @i
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 1 ? ? ?then N'毫'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 2 ? ? ?then N'厘'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 3 ? ? ?then N'分'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 4 ? ? ?then N'角'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 5 ? ? ?then N'元'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 9 ? ? ?then N'萬'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 13 ? ? ?then N'億'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 17 ? ? ?then N'兆'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 21 ? ? ?then N'京'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 25 ? ? ?then N'垓'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 29 ? ? ?then N'杼'?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 33 ? ? ?then N'穰'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 37 ? ? ?then N'溝' --decimal型最大長度是后面的就不用再考慮了
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + case @i%4
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 2 then N'拾' ? ? ?--拾10 14 18 22 26 30 34 38 …………
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 3 then N'佰' ? ? ?--佰11 15 19 23 27 31 35 39 …………
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 0 then N'仟' ? ? ?--仟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) + N'整' --判斷小數位數是不是都是,是就可以取整
? ? ? while patindex(N'%零[仟佰拾角分厘毫零]%',@upperstr) <> 0 ? ?--把零拾或零佰或零零變成一個零
? ? ? ? ? begin
? ? ? ? ? ? set @upperstr = stuff(@upperstr,patindex(N'%零[仟佰拾角分厘毫零]%',@upperstr),2,N'零')
? ? ? ? ? end
? ? ? while patindex(N'%[溝穰杼垓京兆億萬]零[溝穰杼垓京兆億萬]%',@upperstr) <> 0 --把零萬或零億的清空掉
? ? ? ? ? begin
? ? ? ? ? ? select @upperstr = stuff(@upperstr,patindex(N'%[溝穰杼垓京兆億萬]零[溝穰杼垓京兆億萬]%',@upperstr)+1,2,'')
? ? ? ? ? end
? ? ? while patindex(N'%[仟佰拾]零[溝穰杼垓京兆億萬]%',@upperstr) <> 0 --把類似拾零萬或佰零萬或仟零萬中間的零清空掉
? ? ? ? ? begin
? ? ? ? ? ? select @upperstr = stuff(@upperstr,patindex(N'%[仟佰拾]零[溝穰杼垓京兆億萬]%',@upperstr)+1,1,'')
? ? ? ? ? end
? ? ? if patindex(N'%_零[元]%',@upperstr) <> 0 --把類似拾零元或百零元中間的零清空掉
? ? ? ? ? begin
? ? ? ? ? ? select @upperstr = stuff(@upperstr,patindex(N'%_零[元]%',@upperstr) + 1,1,'')
? end
? ? ? else if (patindex(N'零[元]%',@upperstr) <> 0) and (convert(int,right(@lowerstr,4)) <> 0) --判斷當前否是零元開頭,并且后面的四個小數不為
? ? ? ? ? ? ? begin
? ? ? ? ? select @upperstr = stuff(@upperstr,patindex(N'零[元]%',@upperstr),2,'') --把零元清空掉
? ? ? ? end
? ? ? if right(@upperstr,1) = N'零' set @upperstr = left(@upperstr,len(@upperstr)-1) ? ? ?--如果最后一位是零也清空掉
? ? ? if @upperstr = N'元整' set @upperstr = N'零' + @upperstr ? ? ? ? ? ? ? ? ? ? ? ? ? ?--如果只是的話,就顯示零元整
? ? ? return @upperstr ? ? ?--返回大寫金額
end?
?
--測試示例
--Select dbo.LowerToUpper(120000000) --壹億貳仟萬元整
--Select dbo.LowerToUpper(102000000) --壹億零貳佰萬元整
--Select dbo.LowerToUpper(100200000) --壹億零貳拾萬元整
--Select dbo.LowerToUpper(100020000) --壹億零貳萬元整
--Select dbo.LowerToUpper(100002000) --壹億貳仟元整
?Select dbo.LowerToUpper(564000.67)
--運行結果
/*
壹億貳仟萬元整
壹億零貳佰萬元整
壹億零貳拾萬元整
壹億零貳萬元整
壹億貳仟元整
*/

總結

以上是生活随笔為你收集整理的sql server 数字转大写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。