CREATE PROCEDURE [Z_GetRMBUpper] @RMB decimal(12,2)=1111.00,@str_RMB varchar(100)  out  AS
set nocount on
declare 
@ws_RMB varchar(20),
@tmp varchar(1),
@n varchar(4),
@unit varchar(4),
@lenrmb int,
@i int,
@rmbsts char(1)
set @str_rmb=''
if @rmb>=0 
set @rmbsts='T' 
else 
set @rmbsts='F'
set @rmb=abs(@rmb)
set @i=1
set @ws_RMB =ltrim(convert(varchar(11),convert(decimal(12,2),@RMB)))
if @rmbsts='T' 
set @ws_rmb='/'+rtrim(@ws_rmb)
else 
set @ws_rmb='\'+rtrim(@ws_rmb)
set @lenrmb=len(@ws_rmb)
while @i<=@lenrmb
begin
set @tmp=substring(rtrim(@ws_rmb),@lenrmb-@i+1,1)
set @n=case when @tmp='1'  then '壹 '  
when @tmp='2'  then '贰' 
when @tmp='3'  then '叁' 
when @tmp='4'  then '肆' 
when @tmp='5'  then '伍' 
when @tmp='6'  then '陆' 
when @tmp='7'  then '柒' 
when @tmp='8'  then '捌' 
when @tmp='9'  then '玖' 
when @tmp='0'  then '零' 
when @tmp='/'  then '¥'
when @tmp='\'  then '零'
when @tmp='.'  then '' end

 
if @tmp<>'/' and  @tmp<>'\'
set @unit=case when @i=1  then '分'  
when @i=2  then '角' 
when @i=3  then '' 
when @i=4  then '元' 
when @i=5  then '拾' 
when @i=6  then '佰' 
when @i=7  then '仟' 
when @i=8  then '万' 
when @i=9  then '拾' 
when @i=10  then '零 ' 
 end
else set @unit=''
set @str_rmb=@n+@unit+@str_rmb
set @i=@i+1

end

解决方案 »

  1.   

    我上次在网上看到一个写得更好的,是用DELPHI写的,
    很简单的一条语句就搞定了,
    在MSSQL里应该也可以同样实现
    晚上我找出来给你们看看
      

  2.   

    如果你会DELPHI的话,下面的大小写转换函数很容易就看明白的
    procedure TForm1.Button1Click(Sender: TObject);
    var 
      Sum:real;
    begin
      sum:=strtofloat(edit1.Text);
      edit2.Text:='人民币大写:'+xTOd(Sum);
    end;function xTOd(i:real):string;
    const
      d='零壹贰叁肆伍陆柒捌玖分角元拾佰仟万拾佰仟亿';
    var
      m,k:string;
      j:integer;
    begin
      k:='';
      m:=floattostr(int(i*100));
      for j:=length(m) downto 1 do
      begin
        k:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+
          d[(strtoint(m[Length(m)-j+1])+1)*2]+d[(10+j)*2-1]+d[(10+j)*2];
      end;
      xTOd:=k;
    end;