问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql2005中自带的人民币转为大写函数?求大神帮助

发布网友 发布时间:2022-05-01 16:29

我来回答

2个回答

懂视网 时间:2022-05-01 20:50

CREATE  FUNCTION [dbo].[f_num_chn] (@num numeric(14,5))
RETURNS varchar(100) WITH ENCRYPTION
AS
BEGIN
--版权所有:weihuachao@sina.com
  DECLARE @n_data VARCHAR(20),@c_data VARCHAR(100),@n_str VARCHAR(10),@i int   SET @n_data=RIGHT(SPACE(14)+CAST(CAST(ABS(@num*100) AS bigint) AS varchar(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(‘零壹贰叁肆伍陆柒捌玖‘,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(‘仟佰拾亿仟佰拾万仟佰拾圆角分‘,@i,1)
      IF SUBSTRING(@c_data,LEN(@c_data)-1,2)=‘亿万‘
        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

SQLSERVER中的人民币数字转大写的函数实现

标签:varchar   str   函数   not   bst   数字   int   turn   圆角   

热心网友 时间:2022-05-01 17:58

说明: 1.本函数范围从 毫 ~ 兆 2.有四种精度(元,角 ,分,厘 ,毫) 3.有三种进位规则(四舍五入,接舍去,非0就入) 参数说明:dbo.MoneyToCapital( 数值 , 进位 , 精度) 进位(0 四舍五入, 1 直接舍去,2 非0就入) 精确度 (0 元,1 角 ,2 分,3 厘 ,4 毫) -------------------------------------------------------------------------------------------------------- --测试数据: DECLARE @intNum decimal(38,4) SET @intNum = 1123456780.2154 --SET @intNum = 1001 --SET @intNum = 100100 --SET @intNum = 1005001 --SET @intNum = 100.11 --SET @intNum = 100.00 --SET @intNum = 100.01 SET @intNum = 99999999999999.9999 -- 最大 <1百兆(精确到毫) --SET @intNum = 10025.1234 --SET @intNum = 12345.6789 SELECT dbo.MoneyToCapital(@intNum,0,4) -------------------------------------------------------------------------------------------------------- */ CREATE FUNCTION MoneyToCapital ( @mnyNumber decimal(38,4), @intIsRound int = 0, -- 进位 (0 四舍五入, 1 直接舍去,2 非0就入) @intPrecision int = 2 -- 精确度: 0 元,1 角 ,2 分,3 厘 ,4 毫 ) RETURNS nvarchar(50) BEGIN DECLARE @strReturn nvarchar(50) DECLARE @strMoney varchar(50) DECLARE @intLen int DECLARE @strC1 char(1) DECLARE @strC2 char(1) DECLARE @strC3 char(1) DECLARE @intJ int DECLARE @necMoney decimal(38,4) DECLARE @strMoneyUnit nvarchar(50) DECLARE @strNumberCapital nvarchar(50) SET @strMoneyUnit = '毫厘分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟京拾佰仟' SET @strNumberCapital = '零壹贰叁肆伍陆柒捌玖' --0 的情况 IF @mnyNumber = 0 BEGIN SET @strReturn = '零元整' RETURN @strReturn END --超出范围 的情况 IF @mnyNumber < 0 OR @mnyNumber > 99999999999999.9999 BEGIN RETURN CAST(@mnyNumber AS varchar(50)) END ------进位 超出范围 IF @intIsRound<0 OR @intIsRound>2 BEGIN SET @intIsRound = 0 END ------精确度 超出范围 IF @intPrecision<0 OR @intPrecision>4 BEGIN SET @intPrecision = 2 END IF @intIsRound =1 BEGIN--直接舍去 SET @mnyNumber = ROUND(@mnyNumber,2,1) END ELSE IF @intIsRound = 2 BEGIN--非0就入 SET @mnyNumber = ROUND(@mnyNumber,2) END ELSE BEGIN--四舍五入 SET @mnyNumber = ROUND(@mnyNumber,@intPrecision) END SET @necMoney = @mnyNumber * POWER(10,@intPrecision) --精确度 @intPrecision SET @strMoney = CAST(CAST(@necMoney AS bigint) AS varchar(50)) SET @intLen = LEN(@strMoney) --长度 SET @strMoney = REVERSE(@strMoney) --逆转 SET @strReturn='' SET @intJ = 1 -- @intPrecision 精确度: 0 元,1 角 ,2 分,3 厘 ,4 毫( 1 开始对应 毫) WHILE @intJ <= @intLen BEGIN SET @strC1 = SUBSTRING(@strMoney,@intJ-1,1) SET @strC2 = SUBSTRING(@strMoney,@intJ,1) SET @strC3 = SUBSTRING(@strMoney,@intJ+1,1) /* IF @strC2='0' BEGIN--当前数是 0 IF @strC1<>'0' AND @intJ<>1 BEGIN --前一个不是0则加 '零' SET @strReturn = dbo.NumberToCapital(@strC2) + @strReturn END END ELSE BEGIN SET @strReturn = dbo.NumberToCapital(@strC2) + dbo.GetMoneyUnit(@intJ,@strC1,@strC2) + @strReturn END */ SET @strReturn = SUBSTRING(@strNumberCapital , CAST(@strC2 AS int)+1 , 1) +SUBSTRING(@strMoneyUnit , @intJ+4-@intPrecision , 1) + @strReturn SET @intJ = @intJ + 1 END /* SET @strReturn = CAST(@strReturn AS varchar(100)) SET @strReturn = REPLACE(@strReturn,'零元','元') SET @strReturn = REPLACE(@strReturn,'零拾','拾') SET @strReturn = REPLACE(@strReturn,'零佰','佰') SET @strReturn = REPLACE(@strReturn,'零仟','仟') SET @strReturn = REPLACE(@strReturn,'零万','万') SET @strReturn = REPLACE(@strReturn,'零亿','亿') */ RETURN @strReturn END --String1 = "零壹贰叁肆伍陆柒捌玖" --String2 = "万仟佰拾亿仟佰拾万仟佰拾元角分厘毫"
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
重磅|8月1日起 报关单的填法将重大改变 进出口权需要报关员么 宝宝被莫名的虫子咬了又红又肿又痒怎么? 北京疫情个为数是什么意思? 在做刀伤的手术时没有接上神经是医院的过错吗? 手术室收费项目有哪些 手术室的秘密:一台10万的手术,主刀医生拿多少?答案颠覆你的认知 阿里巴巴中修改产品信息只修改一小部分行吗?谢谢 可否给我一个阿里巴巴的序列号~谢谢了 阿里巴巴店铺产品搜索框代码谁有呢,给我发一下谢谢了! 短信骚扰怎么办 怎样防止别人的短信骚扰? countif函数怎么多选条件啊 泡人参、枸杞这样的补酒用白酒和用黄酒有什么不同?用哪种酒好?好像没听说用葡萄酒,有吗? “白玫瑰”造型华美明艳 胡静自掏腰包置面料,胡静是谁呀 浩劫的幕后制作 宝可梦阿尔宙斯课题怎么报告 剑网三背包有哪些? 泰拉瑞亚工具腰包怎么获得 工具腰包作用和制作详解 十进制0.0625转十六进制 业务员薪资等级结构表 十进制小数0.8125的十六进制表示为 有没有什么快捷方法把十进制的小数转化为十六进制的? 十进制小数0.625转换成十六进制小数是多少求解题过程 十进制数0.625转化为十六进制数 十进制小数0.625转换成十六进制小数是多少 联想台式w8.1系统忘记开机密码怎么办 联想电脑忘了开机密码,我是联想w8的系统,电脑里有重要的资料,怎么办 联想win8系统,开机密码忘了怎么办 类比和比喻的具体区别? 2022年农村拆迁政策 合村并镇2022房屋怎么分 优酷缓冲的电影下次还能看吗? 红肉苹果有多少品种 梦间集天鹅座主线怎么换人 梦间集天鹅座知名度作用详解 如何提升知名度 梦间集天鹅座几级可以化妆 天鹅座一天有一个月的时间吗? 梦间集天鹅座神秘人叫啥 梦间集天鹅座特殊成就,前往展览馆是什么? 梦间集天鹅座自动日常任务养成的辅&lrm;助哪些值得用?求推荐 梦间集天鹅座免费辅&#x200F;助有玩家知道吗? 盘点梦间集天鹅座中那些少女心满满的瞬间 梦间集天鹅座猫猫咖啡要怎么获得? 梦间集天鹅座的辅&#x200E;助各位看了吗?从哪里能看到? 梦间集天鹅座免费辅助容易找吗?具体在哪儿找? 梦间集天鹅座自动推图刷资源辅助一般在哪儿找? 梦间集天鹅座手游辅&#x200D;&#x200F;助大家了解过吗? 梦间集天鹅座手游辅助脚本有谁知道?想请教。 请问梦间集天鹅座离线挂机养成工具在哪儿有?