要求:能整除就不保留小数,否则保留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