欢迎加入站点基地设计开发交流群:30720409
详细内容
sql Server里千分位显示数字的方法
发布日期:2013-03-12     点击:5364     字体:[ ]

如果是数字,可用以下方式显示,

Convert(MONEY,'123456789') AS Int_Total,如果需要四舍五入,可用以下方法,定义一个函数,然后调用。

--格式化数据为千分位等格式,比如:1245.56678,144,5.57
--
参数:@inputNumbe输入字符,@floatCount小数位数,0,1,2,3,4
--
时间:2011-04-13
ALTER function FormatNumeric(@inputNumber nvarchar(30) , @floatCount int)
RETURNS nvarchar(30
)
AS

BEGIN
   
DECLARE @strTemp NVARCHAR(30)
   
--1个小数位

    IF(@floatCount=1)
       
BEGIN

           
--测试数据
            --declare @inputNumber  nvarchar(30)
            --set @inputNumber='123246.456'
            --SELECT CONVERT(NUMERIC(18,1),@inputNumber)
            --SELECT CONVERT(MONEY,CONVERT(NUMERIC(18,1),@inputNumber))
            --SELECT CONVERT(NVARCHAR(30) , CONVERT(MONEY,CONVERT(NUMERIC(18,1),@inputNumber)) ,1)

           
--SELECT charindex('.','156.23',0)
            --SELECT charindex('.','123,246.50',0)+1
            --SELECT SUBSTRING('123,246.50',1,charindex('.','123,246.50',0)+1)
            SET @strTemp=
            
SUBSTRING(CONVERT(NVARCHAR(30) ,
                            
CONVERT(MONEY,CONVERT(NUMERIC(18,1),@inputNumber)) ,1
)
                                ,
1
,
                            
CHARINDEX('.',CONVERT(NVARCHAR(30) ,CONVERT(MONEY,CONVERT(NUMERIC(18,1),@inputNumber)) ,1),0)+1
)
           
RETURN @strTemp

       
END
   
--2个小数位
    IF(@FLOATcount=2)
       
BEGIN

           
--SELECT CONVERT(NVARCHAR(30) , CONVERT(MONEY,CONVERT(NUMERIC(18,2),@inputNumber)) ,1)
            SET @strTemp=
            
SUBSTRING(CONVERT(NVARCHAR(30) ,
                            
CONVERT(MONEY,CONVERT(NUMERIC(18,2),@inputNumber)) ,1
)
                                ,
1
,
                            
CHARINDEX('.',CONVERT(NVARCHAR(30) ,CONVERT(MONEY,CONVERT(NUMERIC(18,2),@inputNumber)) ,1),0)+2
)
           
RETURN @strTemp

       
END
--3.无小数
    IF(@FLOATcount=0)
       
BEGIN

       
--SELECT CONVERT(NVARCHAR(30) , CONVERT(MONEY,CONVERT(NUMERIC(18,0),@inputNumber)) ,1)
        SET @strTemp=
        
SUBSTRING(CONVERT(NVARCHAR(30) ,CONVERT(MONEY,CONVERT(NUMERIC(18,0),@inputNumber)) ,1)
                            ,
0
,
                        
CHARINDEX('.',CONVERT(NVARCHAR(30) ,CONVERT(MONEY,CONVERT(NUMERIC(18,0),@inputNumber)) ,1),0
))
       
RETURN @strTemp

   
END
--默认位3位小数
    ELSE
    
BEGIN
    
SET @strTemp=
       
SUBSTRING(convert(nvarchar(30),
           
CONVERT(money,SUBSTRING(convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber
))
            ,
0

            ,
charindex('.',convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)))
            )),
1),0
,
           
charindex('.'
,
           
convert(nvarchar(30
),
           
CONVERT(money,SUBSTRING(convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber
))
            ,
0

            ,
charindex('.',convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)))
            )),
1
))
            )
           
+'.'

           
+SUBSTRING(convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber))
            ,
charindex('.',convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)))+1

            ,
len(convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)))-charindex('.',convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)))   
            )
    
END

return @strTemp
END

--SELECT dbo.FormatNumeric(Fld0055,2) from Pur0099
--
SELECT dbo.FormatNumeric(Fld0055,1) from Pur0099

说明:
不过在MS的开发环境中,最好还是用string类的函数进行数据格式化,这样速度很快,不会拖累服务器,比如:12346789.15678,格式化为:12346789.15678.ToString('N1'),N1,N2,表示1,2个小数位,因此,在DATAGRIVEW中处理格式化,那就在数据源DATATABLE中的列中格式最好。
发现有的时候方法和诀窍是很重要的,经验也是很重要的。因此,处理过了的东西,你下次处理肯定会有优先考虑那种办法。只是好坏,快慢而也,也许就是结果可能一样。


 

用户评论
昵称 
内容  *
验证码   
   
Copyright © 2010 zdbase.com All Rights Reserved. 苏ICP备15039389号 可人软件设计