数字金额转大写SQL函数实现

  1 set  ANSI_NULLS  ON
  2 set  QUOTED_IDENTIFIER  ON
  3 go
  4
  5 ALTER   FUNCTION   [ dbo ] . [ FN_CONTRACT_MONEY_UPPER ]  ( @n_LowerMoney  numeric( 15 , 2 ), @v_TransType   int )  
  6 RETURNS   VARCHAR ( 200 AS   
  7 BEGIN  
  8 Declare   @v_LowerStr   VARCHAR ( 200 --  小写金额 
  9 Declare   @v_UpperPart   VARCHAR ( 200
 10 Declare   @v_UpperStr   VARCHAR ( 200 --  大写金额
 11 Declare   @i_I   int
 12
 13 set   @v_LowerStr   =   LTRIM ( RTRIM ( ROUND ( @n_LowerMoney , - 2 )))  -- 四舍五入为指定的精度并删除数据左右空格--精确到百位
 14 set   @i_I   =   1
 15 set   @v_UpperStr   =   ''
 16
 17 while  (  @i_I   <=   len ( @v_LowerStr ))
 18 begin
 19        select   @v_UpperPart   =   case   substring ( @v_LowerStr , len ( @v_LowerStr -   @i_I   +   1 , 1 )
 20                              WHEN    ' . '   THEN    ' '
 21                              WHEN    ' 0 '   THEN    ' '
 22                              WHEN    ' 1 '   THEN    ' '
 23                              WHEN    ' 2 '   THEN    ' '
 24                              WHEN    ' 3 '   THEN    ' '
 25                              WHEN    ' 4 '   THEN    ' '
 26                              WHEN    ' 5 '   THEN    ' '
 27                              WHEN    ' 6 '   THEN    ' '
 28                              WHEN    ' 7 '   THEN    ' '
 29                              WHEN    ' 8 '   THEN    ' '
 30                              WHEN    ' 9 '   THEN    ' '
 31                              END
 32                            +  
 33                              case   @i_I
 34                              WHEN    1    THEN    ' '
 35                              WHEN    2    THEN    ' '
 36                              WHEN    3    THEN    ''
 37                              WHEN    4    THEN    ''
 38                              WHEN    5    THEN    ' '
 39                              WHEN    6    THEN    ' '
 40                              WHEN    7    THEN    ' '
 41                              WHEN    8    THEN    ' '
 42                              WHEN    9    THEN    ' '
 43                              WHEN    10    THEN    ' '
 44                              WHEN    11    THEN    ' '
 45                              WHEN    12    THEN    ' 亿 '
 46                              WHEN    13    THEN    ' '
 47                              WHEN    14    THEN    ' '
 48                              WHEN    15    THEN    ' '
 49                              WHEN    16    THEN    ' '
 50                              ELSE   ''
 51                              END
 52 set   @v_UpperStr   =   @v_UpperPart   +   @v_UpperStr
 53 set   @i_I   =   @i_I   +   1
 54 end
 55
 56 if  (  0   =   @v_TransType )
 57 begin
 58 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零拾 ' , ' '
 59 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零佰 ' , ' '
 60 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零仟 ' , ' '
 61 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零零零 ' , ' ' )
 62 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零零 ' , ' ' )
 63 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零角零分 ' , ' ' )
 64 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零分 ' , ' ' )
 65 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零角 ' , ' ' )
 66 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零亿零万零元 ' , ' 亿元 ' )
 67 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 亿零万零元 ' , ' 亿元 ' )
 68 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零亿零万 ' , ' 亿 ' )
 69 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零万零元 ' , ' 万元 ' )
 70 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 万零元 ' , ' 万元 ' )
 71 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零亿 ' , ' 亿 ' )
 72 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零万 ' , ' ' )
 73 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零元 ' , ' ' )
 74 set   @v_UpperStr   =   REPLACE ( @v_UpperStr , ' 零零 ' , ' ' )
 75 end
 76
 77 --  对壹元以下的金额的处理 
 78 if  (  ' '   =   substring ( @v_UpperStr , 1 , 1 ))
 79 begin
 80       set   @v_UpperStr   =   substring ( @v_UpperStr , 2 ,( len ( @v_UpperStr -   1 ))
 81 end
 82
 83 if  (  ' '   =   substring ( @v_UpperStr , 1 , 1 ))
 84 begin
 85       set   @v_UpperStr   =   substring ( @v_UpperStr , 2 ,( len ( @v_UpperStr -   1 ))
 86 end
 87
 88 if  (  ' '   =   substring ( @v_UpperStr , 1 , 1 ))
 89 begin
 90       set   @v_UpperStr   =   substring ( @v_UpperStr , 2 ,( len ( @v_UpperStr -   1 ))
 91 end
 92
 93 if  (  ' '   =   substring ( @v_UpperStr , 1 , 1 ))
 94 begin
 95       set   @v_UpperStr   =   substring ( @v_UpperStr , 2 ,( len ( @v_UpperStr -   1 ))
 96 end
 97
 98 if  ( ' '   =   substring ( @v_UpperStr , 1 , 1 ))
 99 begin
100       set   @v_UpperStr   =   ' 零元整 '
101 end
102
103 return   replace ( replace ( replace ( replace ( replace ( replace ( @v_UpperStr , ' 零角 ' , '' ), ' 零分 ' , '' ), ' 零元 ' , '' ), ' 零拾 ' , '' ), ' 零佰 ' , '' ), ' 零仟 ' , '' ) + ' 圆整 '
104 END

你可能感兴趣的:(sql)