数字大小写转换(包括金额)

(原创)自己写了一个数字转换成大小写,有8种格式,大家可以相互转载,请注明出处。


/*
传入一组数,返回其大写格式
@Num  数
@FormatType 格式( 【数字大写】100:普通格式  101:[数量]单位格式  102:只处理整数部份  103:金额加单位格式
   【中文大写】200:普通格式  201:[数量]单位格式  202:只处理整数部份  203:金额加单位格式
   )
*/
CREATE  FUNCTION GetNumberFormat(@Num numeric(18,4),@FormatType INT)
RETURNS NVARCHAR(100)

AS

BEGIN
DECLARE @RE   NVARCHAR(100)  --返回值
DECLARE @FormatNum NVARCHAR(100)  --需要格式化的数据
DECLARE @DecimalPlace  NVARCHAR(100)  --需要格式化的数据的小数位
DECLARE @LenNum  INT   --长度
DECLARE @String1 NVARCHAR(50)  --单位1
DECLARE @String2 NVARCHAR(50)  --单位2 
DECLARE @String3 NVARCHAR(50)  --单位3

SELECT @DecimalPlace = N''
SELECT @String1 = N'元角分厘'
SELECT @String2 = N'十百千万十百千亿十百千万十百千'
SELECT @String3 = N'拾佰仟万拾佰仟亿拾佰仟万拾佰仟'

SELECT @FormatNum=CONVERT(NVARCHAR(100),@Num)
SELECT @RE=N''
SELECT @LenNum=LEN(@Num)

IF @FormatType = 100 OR @FormatType = 101  OR @FormatType = 102  OR @FormatType = 103
BEGIN
 SELECT @FormatNum = Replace(@FormatNum,N'0',N'零')
 SELECT @FormatNum = Replace(@FormatNum,N'1',N'一')
 SELECT @FormatNum = Replace(@FormatNum,N'2',N'二')
 SELECT @FormatNum = Replace(@FormatNum,N'3',N'三')
 SELECT @FormatNum = Replace(@FormatNum,N'4',N'四')
 SELECT @FormatNum = Replace(@FormatNum,N'5',N'五')
 SELECT @FormatNum = Replace(@FormatNum,N'6',N'六')
 SELECT @FormatNum = Replace(@FormatNum,N'7',N'七')
 SELECT @FormatNum = Replace(@FormatNum,N'8',N'八')
 SELECT @FormatNum = Replace(@FormatNum,N'9',N'九')
END
ELSE IF @FormatType = 200 OR @FormatType = 201 OR @FormatType = 202 OR @FormatType = 203
BEGIN
 SELECT @FormatNum = Replace(@FormatNum,N'0',N'零')
 SELECT @FormatNum = Replace(@FormatNum,N'1',N'壹')
 SELECT @FormatNum = Replace(@FormatNum,N'2',N'贰')
 SELECT @FormatNum = Replace(@FormatNum,N'3',N'叁')
 SELECT @FormatNum = Replace(@FormatNum,N'4',N'肆')
 SELECT @FormatNum = Replace(@FormatNum,N'5',N'伍')
 SELECT @FormatNum = Replace(@FormatNum,N'6',N'陆')
 SELECT @FormatNum = Replace(@FormatNum,N'7',N'柒')
 SELECT @FormatNum = Replace(@FormatNum,N'8',N'捌')
 SELECT @FormatNum = Replace(@FormatNum,N'9',N'玖')
END

IF @LenNum=0
BEGIN
 SET @RE = N''
END
ELSE
BEGIN
 IF @FormatType=100 OR @FormatType=200
 BEGIN
  SET @RE = @FormatNum
 END
 ELSE IF @FormatType=101 OR @FormatType=201  OR @FormatType = 103 OR  @FormatType=102 OR @FormatType=202  OR @FormatType = 203
 BEGIN
  IF CHARINDEX('.',@FormatNum)!=0
  BEGIN    
   --小数位
   SET @DecimalPlace = RIGHT(@FormatNum,@LenNum-CHARINDEX('.',@FormatNum))
   --整数位
   SET @FormatNum = LEFT(@FormatNum,CHARINDEX('.',@FormatNum)-1)
   --重置整数长度
   SELECT @LenNum=LEN(@FormatNum)
  END

  WHILE (@LenNum >0)
  BEGIN
   SET @RE=@RE+SUBSTRING(@FormatNum,LEN(@FormatNum)+1-@LenNum,1)
   IF @LenNum!=1
   BEGIN
    IF @FormatType=101 OR @FormatType=102 OR @FormatType = 103
    BEGIN
     SET @RE=@RE+SUBSTRING(@String2,@LenNum-1,1)
    END
    ELSE IF @FormatType=201 OR @FormatType=202 OR @FormatType = 203
    BEGIN
     SET @RE=@RE+SUBSTRING(@String3,@LenNum-1,1)    
    END
   END
   SET @LenNum=@LenNum-1
  END
  
  --处理整数返回格式
  IF @FormatType=101 OR @FormatType=102 OR @FormatType = 103
  BEGIN
   SELECT @RE = Replace(@RE,N'零千零百零十零亿',N'亿')
   SELECT @RE = Replace(@RE,N'零百零十零亿',N'亿')
   SELECT @RE = Replace(@RE,N'零十零亿',N'亿')
   SELECT @RE = Replace(@RE,N'零亿',N'亿')
   SELECT @RE = Replace(@RE,N'零千零百零十零万',N'万')
   SELECT @RE = Replace(@RE,N'零百零十零万',N'万')
   SELECT @RE = Replace(@RE,N'零十零万',N'万')
   SELECT @RE = Replace(@RE,N'零万',N'万')
   SELECT @RE = Replace(@RE,N'零千零百零十零',N'')
   SELECT @RE = Replace(@RE,N'亿万',N'亿')   
   SELECT @RE = Replace(@RE,N'零百零十零',N'')
   SELECT @RE = Replace(@RE,N'零十零',N'')
   SELECT @RE = Replace(@RE,N'零',N'')
   SELECT @RE = Replace(@RE,N'千百',N'千零')
   SELECT @RE = Replace(@RE,N'亿千零十',N'亿零')
   SELECT @RE = Replace(@RE,N'千零十',N'千零')
   SELECT @RE = Replace(@RE,N'万千零',N'万零')
   SELECT @RE = Replace(@RE,N'亿千零',N'亿零')
   SELECT @RE = Replace(@RE,N'亿千',N'亿零')
   SELECT @RE = Replace(@RE,N'万千',N'万零')
   SELECT @RE = Replace(@RE,N'百十',N'百零')
  END
  ELSE IF @FormatType=201 OR @FormatType=202 OR @FormatType = 203
  BEGIN
   SELECT @RE = Replace(@RE,N'零仟零佰零拾零亿',N'亿')
   SELECT @RE = Replace(@RE,N'零佰零拾零亿',N'亿')
   SELECT @RE = Replace(@RE,N'零拾零亿',N'亿')
   SELECT @RE = Replace(@RE,N'零亿',N'亿')
   SELECT @RE = Replace(@RE,N'零仟零佰零拾零万',N'万')
   SELECT @RE = Replace(@RE,N'零佰零拾零万',N'万')
   SELECT @RE = Replace(@RE,N'零拾零万',N'万')
   SELECT @RE = Replace(@RE,N'零万',N'万')
   SELECT @RE = Replace(@RE,N'零仟零佰零拾零',N'')
   SELECT @RE = Replace(@RE,N'亿万',N'亿')   
   SELECT @RE = Replace(@RE,N'零佰零拾零',N'')
   SELECT @RE = Replace(@RE,N'零拾零',N'')
   SELECT @RE = Replace(@RE,N'零',N'')
   SELECT @RE = Replace(@RE,N'仟佰',N'仟零')
   SELECT @RE = Replace(@RE,N'亿千零拾',N'亿零')
   SELECT @RE = Replace(@RE,N'仟零拾',N'仟零')
   SELECT @RE = Replace(@RE,N'万仟零',N'万零')
   SELECT @RE = Replace(@RE,N'亿仟零',N'亿零')
   SELECT @RE = Replace(@RE,N'亿仟',N'亿零')
   SELECT @RE = Replace(@RE,N'万仟',N'万零')
   SELECT @RE = Replace(@RE,N'佰拾',N'佰零')
  END

  IF (@FormatType=101 OR @FormatType=103 OR @FormatType=201 OR @FormatType=203) AND LEN(@DecimalPlace)!=0
  BEGIN  
   --重置小数位长度
   SELECT @LenNum=LEN(@DecimalPlace)

   IF @FormatType=101 OR @FormatType=201
   BEGIN
    SET @RE=@RE+N'.'+@DecimalPlace
   END
   ELSE IF @FormatType=103 OR @FormatType=203
   BEGIN
    WHILE (@LenNum >=0)
    BEGIN
     SET @RE=@RE+SUBSTRING(@DecimalPlace,LEN(@DecimalPlace)-@LenNum-1,1)
     SET @RE=@RE+SUBSTRING(@String1,LEN(@DecimalPlace)-@LenNum,1)
     SET @LenNum=@LenNum-1
    END
   END
   --处理小数返回格式
   IF @FormatType=101 OR @FormatType=201
   BEGIN
    SELECT @RE = Replace(@RE,N'.零零零零',N'')
   END
   ELSE IF @FormatType=103 OR @FormatType=203
   BEGIN
    SELECT @RE = Replace(@RE,N'零角零分零厘零',N'整')
    SELECT @RE = Replace(@RE,N'零角零分零厘',N'整')
    SELECT @RE = Replace(@RE,N'零角零分',N'零')
    SELECT @RE = Replace(@RE,N'零角',N'零')
    SELECT @RE = Replace(@RE,N'零分零厘',N'')
    SELECT @RE = Replace(@RE,N'零厘',N'')
    SELECT @RE = Replace(@RE,N'零分',N'零')
    SELECT @RE = Replace(@RE,N'元零零',N'零')
   END
  END

  IF @Num=0
  BEGIN
   SET @RE=N'零'
  END
 END
END

RETURN @RE

END

 

 

Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(原有)] F061601B [股权自由现金流(原有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值