sql server 中 长数字隔三位用逗号","隔开怎么做?
sql server 中 长数字隔三位用逗号","隔开怎么做?不要保留小数位,急!!!
[解决办法]
select convert(varchar(1000),cast(123456789.12 as money),1)
--结果
123,456,789.12
[解决办法]
--数据转成货币格式,就是千分位逗号,小数位数之类分析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
[解决办法]
USE tempdbGOIF OBJECT_ID('fn_Num') IS NOT NULL DROP FUNCTION fn_NumgoCREATE FUNCTION fn_Num( @num DECIMAL(38,4))RETURNS NVARCHAR(50)ASbegin 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)ENDGOSELECT dbo.fn_num(123456789.1230)/*123,456,789.1230*/