日期:2014-05-18 浏览次数:20639 次
--数据转成货币格式,就是千分位逗号,小数位数之类分析 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