日期:2014-05-19  浏览次数:20821 次

求解方法
如何将dec(19,2)类型的数值转换成大写的RMB数值

0.05                       ------------     伍分
0.00                       ---------           零圆
10.00                   ----------       拾圆
1000000000   -----------     拾亿
101.05               -------------   壹佰零壹圆零伍角

即将数值转换成正规的大写读法!
谢谢

------解决方案--------------------
http://www.qiuhao.com/dispbbs.asp?BoardID=15&ID=3833
------解决方案--------------------
收藏
------解决方案--------------------
偶收藏了一个好像是邹老大写的
CREATE FUNCTION [dbo].[f_num_chn] (@num numeric(14,2))
RETURNS varchar(100) WITH ENCRYPTION
AS
BEGIN
--版权所有:pbsql
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
------解决方案--------------------
不错!收藏!
------解决方案--------------------
邹老大的函数经典。
------解决方案--------------------
这的确是个相当麻烦的问题!
前一段时间一直都没有解决,惭愧啊~~~
------解决方案--------------------
呵呵。。~
提一个小小的建议:
最后的 '整 ',应该是没有小数或者 小数点之后都是0的情况下才应该有
------解决方案--------------------
楼主再参考这个:
--创建函数
Create Function ChangeBigSmall(@ChangeMoney money)
Returns VarChar(100) AS

Begin
Declare @String1 char(20)
Declare @String2 char(30)
Declare @String4 Varchar(100)
Declare @String3 Varchar(100) --从原A值中取出的值
Declare @i int --循环变量
Declare @J Int --A的值乘以100的字符串长度
Declare @Ch1 Varchar(100) --数字的汉语读法
Declare @Ch2 Varchar(100) --数字位的汉字读法
Declare @Zero Int --用来计算连续有几个零
Declare @ReturnValue VarChar(100)

Select @ReturnValue = ' '
Select @String1 = '零壹贰叁肆伍陆柒捌玖 '
Select @String2 = '万仟佰拾亿仟佰拾万仟佰拾元角分 '

Select @String4 = Cast(@ChangeMoney*100 as int)
Select @J=len(cast((@ChangeMoney*100) as int))
Select @String2=Right(@String2,@J)
Select @i = 1

While @i <= @j