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