当前位置: 代码迷 >> Sql Server >> sql server2005/2008 保留小数,该怎么处理
  详细解决方案

sql server2005/2008 保留小数,该怎么处理

热度:391   发布时间:2016-04-24 10:27:33.0
sql server2005/2008 保留小数
要求:能整除就不保留小数,否则保留4位小数。
举例: 12 / 3 = 4           --整除无需要保留小数
             12 / 5 = 2.4000  --不能整除,保留4位小数
最好一条语句,谢谢!
------解决方案--------------------
select CONVERT(decimal(18, 4), CONVERT(decimal, 12) / CONVERT(decimal, 5))
------解决方案--------------------

create proc sp_xyz
(@x int,@y int)
as
begin
 select replace(convert(decimal(20,4),@x/(@y*1.0)),'.0000','') 'z'
end


-- 测试1
exec sp_xyz @x=12,@y=3

/*
z
----------------------
4

(1 row(s) affected)
*/


-- 测试2
exec sp_xyz @x=12,@y=5

/*
z
----------------------
2.4000

(1 row(s) affected)
*/

------解决方案--------------------
DECLARE @a INT
DECLARE @b INT 
SET @a=12
SET @b=5


SELECT CASE WHEN @a%@b=0 THEN @a/@b ELSE CAST  (@a*1.0000/@b AS decimal(6,4)) END 

/*

---------------------------------------
2.4000
*/

------解决方案--------------------
试试这个:

 select cast(round(12 * 1.0 / 5,4) as numeric(20,4))

------解决方案--------------------
这种效果要转换类型才行了,一个语句查出是一个字段,一个字段不可能多个类型啊。不管你怎么写,还是4.000和2.4000,会隐式转换的。换么转换一下类型,要么没有必要这样做。
DECLARE @a INT
DECLARE @b INT 
SET @a=12
SET @b=5
 
SELECT CASE WHEN @a%@b=0 
THEN CAST (@a/@b AS VARCHAR(10)) 
ELSE CAST(CAST(@a*1.0000/@b AS decimal(9,4)) AS VARCHAR(10)) 
END 

  相关解决方案