日期:2014-05-18  浏览次数:20624 次

sql server 中 长数字隔三位用逗号","隔开怎么做?
sql server 中 长数字隔三位用逗号","隔开怎么做?不要保留小数位,急!!!

------解决方案--------------------
select convert(varchar(1000),cast(123456789.12 as money),1)

--结果
123,456,789.12

------解决方案--------------------
SQL code
--数据转成货币格式,就是千分位逗号,小数位数之类分析
declare @inputNumber  nvarchar(30) 
            set @inputNumber='123246.456778'
--比如三位小数
--直接转成数字位数
SELECT CONVERT(NUMERIC(18,3),@inputNumber)
            --SELECT CONVERT(MONEY,CONVERT(NUMERIC(18,1),@inputNumber))
--SELECT SUBSTRING('WONDER.abc',0,CHARINDEX('.','WONDER.abc'))
--再截取整数
select SUBSTRING(convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber))
,0
,charindex('.',convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)))
)
--截取小数部分
select 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)))
)
--将整数部分转成数字
select
CONVERT(money,SUBSTRING(convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber))
,0
,charindex('.',convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)))
),1)
--整数部分转成货币千分位
select
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)
--

--截取转成货币千分位后的整数部分
SELECT
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))
)

--合并小数位
    SELECT
    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)))
    )
分析完毕自己创建自定义函数 :

--格式化数据为千分位等格式,比如: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