2012-10-03 42 views
5

我在內部查詢中計算字段'MySum',其計算後的值爲58.SQL格式化捨去小數

我需要獲得此值的20%。

如果我給:

MySum * 20 /100, I get 11 

如果我給:

((20 * CAST(MySum as decimal(6,2)))/100) , I get 11.60000 

如果我給

Round(((20 * CAST(MySum as decimal(6,2)))/100), 2), I still get 11.60000 

我想的是,

如果結果來11.6,它應該顯示12,如果結果是11.4,它應該顯示11.

我想捨棄值。任何功能?

回答

22

使用ROUND()(See examples)函數在SQL Server

select round(11.6,0) 

結果:

12.0 

EX2:

select round(11.4,0) 

結果:

11.0 

,如果你不想要的小數部分,你可以做

select cast(round(11.6,0) as int) 
+1

我根本不需要小數位。如果不是Round,我使用CEILING。我在CEILING中獲得的值格式,與我需要的值相同,但是通過舍入值。 – RMN

+1

@RMN:請參閱我的回答中的最後一條語句 –

+0

它也適用於OLEDB。我在一個DBF表(foxpro)中使用它,它的工作完美無瑕。 –

1
CAST(Round(MySum * 20.0 /100, 0) AS INT) 

FYI

MySum * 20/10我得到11

這是因爲當所有的3個操作數是整型,SQL Server將做執行整數數學,從左到右,截斷所有中間結果。

58 * 20/100 => 1160/100 => 11 (truncated from 11.6) 

另外備案ROUND(M,N)結果返回到n位小數,Ñ顯著數字。

+0

我的錯,我沒有提到。Even Round(((20 * CAST(MySum as decimal(6,2)))/ 100),0)給出12.00000,但我只想要12,消除小數點後的數字。 – RMN

+0

哪個是CAST(如INT)所做的。 – RichardTheKiwi

1

檢查round功能,請問該怎麼length論證工作。它控制的結果

+0

http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx for english –

-1
SELECT CONVERT(INT, 11.4) 

結果的精度行爲:11

SELECT CONVERT(INT, 11.6) 

結果:11