当前位置: 代码迷 >> Sql Server >> sql server 中 长数字隔三位用逗号""隔开如何做
  详细解决方案

sql server 中 长数字隔三位用逗号""隔开如何做

热度:87   发布时间:2016-04-27 14:44:46.0
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))))--将整数部分转成数字selectCONVERT(money,SUBSTRING(convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)),0,charindex('.',convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)))),1)--整数部分转成货币千分位selectconvert(nvarchar(30),CONVERT(money,SUBSTRING(convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber)),0,charindex('.',convert(nvarchar(30) ,CONVERT(NUMERIC(18,3),@inputNumber))))),1)----截取转成货币千分位后的整数部分SELECTSUBSTRING(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-13ALTER function FormatNumeric(@inputNumber nvarchar(30) , @floatCount int)RETURNS nvarchar(30)ASBEGIN    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)))                )     ENDreturn @strTempEND--SELECT dbo.FormatNumeric(Fld0055,2) from Pur0099--SELECT dbo.FormatNumeric(Fld0055,1) from Pur0099
  相关解决方案