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

解决方案 »

  1.   

    這是Excel上的顯示?SQL存儲,只能用字符
      

  2.   

    select convert(varchar(1000),cast(123456789.12 as money),1)--结果
    123,456,789.12
      

  3.   

    --数据转成货币格式,就是千分位逗号,小数位数之类分析
    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
                --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
      

  4.   

    USE tempdb
    GO
    IF OBJECT_ID('fn_Num') IS NOT NULL
    DROP FUNCTION fn_Num
    go
    CREATE FUNCTION fn_Num(
    @num DECIMAL(38,4)
    )
    RETURNS NVARCHAR(50)
    AS
    begin
    DECLARE @s nvarchar(50),@split nvarchar(50),@i int
    SELECT @s=@num,@i=CHARINDEX('.',REVERSE(@s)),@Split=RIGHT(@s,@i),@s=LEFT(@s,LEN(@s)-@i),@i=3
    WHILE LEN(@s)>3
    SELECT @Split=','+RIGHT(@s,3)+@Split,@s=LEFT(@s,LEN(@s)-3)
    RETURN(@s+@Split)
    END
    GO
    SELECT dbo.fn_num(123456789.1230)
    /*
    123,456,789.1230
    */
      

  5.   

    --或直接指定參數為字符,不用再定義一個字符USE tempdb
    GO
    IF OBJECT_ID('fn_Num') IS NOT NULL
    DROP FUNCTION fn_Num
    go
    CREATE FUNCTION fn_Num(
    @s nvarchar(50)
    )
    RETURNS NVARCHAR(50)
    AS
    begin
    DECLARE @split nvarchar(50),@i int
    SELECT @i=CHARINDEX('.',REVERSE(@s)),@Split=RIGHT(@s,@i),@s=LEFT(@s,LEN(@s)-@i),@i=3
    WHILE LEN(@s)>3
    SELECT @Split=','+RIGHT(@s,3)+@Split,@s=LEFT(@s,LEN(@s)-3)
    RETURN(@s+@Split)
    END
    GO
    SELECT dbo.fn_num(123456789.1230)
    /*
    123,456,789.1230
    */