SQL Server將總是給出一個整數結果,當你把兩個整數。
您可以將「.0」添加到實際硬編碼值的末尾,或乘以「1.0」來轉換字段值。如果你想四捨五入,那麼我知道的最好方法是加0.5,然後調用普通的ROUND函數。這是有效的,因爲ROUND_DOWN(數字+5)總是與ROUND_UP(數字)相同。
您也可以像其他人指出的那樣,手動將字段轉換爲浮點數。
但是請注意,
round(1.0/2.0,0)
將返回浮點結果,而
round(cast(1 as float)/cast(2 as float),0)
會給出一個整數結果。所以請使用最適合您的那個。
所有這些在下面的例子中說明:
SELECT
ROUND(5/2,0) AS INTEGER_EXAMPLE
,ROUND((5.0/2.0),0) AS FLOATING_POINT_EXAMPLE
,ROUND(CAST(5 AS FLOAT)/CAST(2 AS FLOAT),0) AS CASTING_EXAMPLE
,ROUND((5 * 1.0)/(2 * 1.0),0) AS CONVERTED_TO_FP_EXAMPLE
,ROUND(((1 * 1.0)/(4 * 1.0)) + (1.0/2.0),0) AS ROUNDED_UP_EXAMPLE
這裏是一個會做圍捕的你,用SELECT向你展示它給人的結果一起的功能。
create function roundup(@n float) returns float
as
begin
--Special case: if they give a whole number, just return it
if @n = ROUND(@n,0)
return @n;
--otherwise, add half and then round it down
declare @result float = @n;
declare @half float = (1.0/2.0);
set @result = round(@n + @half,0);
return @result;
end
select
dbo.roundup(0.0) as example_0
,dbo.roundup(0.3) as example_pt_three
,dbo.roundup(0.5) as example_pt_five
,dbo.roundup(0.9) as example_pt_nine
謝謝!工作很好 – Martin 2010-11-22 02:08:00