--1、人民币小写金额转大写(第一版)

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

-- Title: 人民币小写金额转大写

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

-- Environment: Vista + SQL2005

-- Date: 2008-06-12

-- Remark: dobear原创,转载请注明出处,有问题请发Mail告之

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

go

--创建函数

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 '(负)' 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

--测试示例

select dbo.fn_getformatmoney(4545.44)

--运行结果

/*

肆仟伍佰肆拾伍圆肆角肆分

*/

--2、人民币小写金额转大写(第二版)

/*编写者:(博客天地www.inbaidu.com )

创建时间:

功能:小写金额转换成大写

参数:@LowerMoney 小写金额加上小数点最长可以保留位

输出:大写金额

简介:SQL版小写金额转换成大写金额(最多可以精确到小数点四位)

注: Decimal 数据类型最多可存储个数字

转载:请保留以上信息,谢谢!!!

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

go

--创建函数

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 因为小数位精确到四位,没有的话,它会自动补)

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 '元'      --注:如果个位为的话,并且四位小数都是或者它的长度超过(也就是超过元),则为元

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

else

+ case substring(@lowerstr,@lowerlen - @i + 1,1) --看当前位是数字几,就直接替换成汉字繁体大写

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) + '整' --判断小数位数是不是都是,是就可以取整

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) --判断当前否是零元开头,并且后面的四个小数不为

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) --壹亿贰仟元整

--运行结果

/*

壹亿贰仟萬元整

壹亿零贰佰萬元整

壹亿零贰拾萬元整

壹亿零贰萬元整

壹亿贰仟元整

*/

【叶子函数分享十八】人民币小写金额转大写相关推荐

  1. SQL人民币小写金额转大写

    --1.人民币小写金额转大写(第一版) ==================================================================== -- Title: 人 ...

  2. 人民币小写金额转大写

    -- ==================================================================== -- Title: 人民币小写金额转大写 -- Auth ...

  3. JS人民币小写金额转换为大写(没毛病)

    /** * 人民币小写金额转换为大写 */ export const digitUppercase = (n) => {let fraction = ['角', '分'] let digit = ...

  4. (转)人民币小写金额转大写(SQL)

    以下转自 http://www.qeqoo.com/dev/database/dbms/3216.html -- =========================================== ...

  5. js 人民币小写金额转换为大写

    function smalltoBIG(n) {var fraction = ['角', '分'];var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒 ...

  6. php大写转为小写,PHP 实现人民币小写转换成大写的方法及大小写转换函数

    php 的 PHP 实现人民币小写转换成大写的方法及大小写转换函数 下面一段代码给大家分享php实现人民币大小写转换的方法,具体代码如下所示: header("charset=utf-8;& ...

  7. 工具篇——MoneyFormatUtil(用于将人民币小写金额转换成大写金额)

    写代码的四点: 1.明确需求.要做什么? 2.分析思路.要怎么做?(1,2,3--) 3.确定步骤.每一个思路要用到哪些语句.方法和对象. 4.代码实现.用具体的语言代码将思路实现出来. 学习新技术的 ...

  8. 人民币小写金额转大写金额

    #region 人民币小写金额转大写金额/// <summary>/// 小写金额转大写金额/// </summary>/// <param name="Mon ...

  9. 人民币 小写金额转换为大写金额

    人民币 小写金额转换为大写金额 标签(空格分隔): 人民币 小写金额转换为大写金额 jsp: div class="form-group"> <label class= ...

最新文章

  1. OP_REQUIRES failed at conv_ops.cc:386 : Resource exhausted: OOM when allocating tensor with shape..
  2. Android2.3操作系统即将发布,亮点解读
  3. Directory lookup for the file xxx.mdf failed with the operating system error 2
  4. 文巾解题 477. 汉明距离总和
  5. python端口扫描工具_Python实现的多线程端口扫描工具分享
  6. vuex的命名空间有哪些_Python3 命名空间和作用域
  7. java 安卓调试,Android Studio(二十一):调试你的应用
  8. Git检出远程库的分支等相关操作
  9. Power of Four(Leetcode 342)
  10. B站后台源码疑似泄露,作为程序员我们得注意哪些?
  11. shared pool 和buffer pool 详解(之二, Cache Buffers LRU Chain、Cache Buffers LRU Chain闩锁竞争与解决)
  12. 约4万个外国人名,中英对照
  13. yuki翻译器钩子_最新YUKI GALGAME翻译器下载地址电脑版-CC软件
  14. FPGA蜂鸣器演奏音乐
  15. AHU计科(伪)新生指南
  16. 将使用Kivy的Python程序打包为安卓的apk文件(使用python-for-android)
  17. VRay Next for SketchUp 泳池水材质制作教程
  18. 模板应用到多个主机 zabbix_玩转zabbix之快速入门,超全组件讲解
  19. 网易视频云: 网易平台级视频服务存储技术
  20. CALIPSO数据下载方法与可视化

热门文章

  1. P存储 EVA6000 服务器无法识别VG
  2. CSS学习------强制换行与不换行
  3. CGB2005-京淘18
  4. Mybatis-Plus的介绍和使用
  5. mysql lock wait_Mysql错误: Lock wait timeout exceeded 解决办法
  6. 如何判断IP地址是否为同一网段
  7. Magic Zoom V3图片放大镜特效 仿凡客诚品商城图片细节放大展示
  8. Mac安装redis详解(附图片)
  9. [Xmind]关于Xmind的使用方法
  10. html5手机密码修改,js+html5实现手机九宫格密码解锁功能