2011-08-25 87 views
1

不知道爲什麼此轉換失敗。SQL Server 2008 - 從字符串到int的轉換失敗

SELECT CAST('32.999' AS INT) 

引發錯誤說轉換VARCHAR值時'32 0.000' 到數據 int類型

轉換失敗。

我知道我可以將其轉換爲Decimal,然後將其轉換爲Int但爲什麼32.000沒有被轉化爲Int直接?

我在這裏錯過了什麼嗎?

- 編輯 -

我不關心小數點。我希望SQL忽略它們。

回答

5

32.000不能準確地表示爲由於小數一個int。相反,如果你想要一個帶有小數的數值,你可以使用浮點(或數字)數據類型。

Select CAST('32.000' as float) 

編輯:誤讀你的問題一點點。

我假設SQL嘗試,最好保持你的意圖。當它讀入你正試圖施放的數值有十進制值時,它會拒絕它。

+1

好點,但我不在乎小數點。我希望SQL忽略它們。 – Asdfg

+0

如果您將'32 .000'轉換爲浮點數,則該值的顯示將爲'32'。它不會嘗試顯示.000 – Zhais

+1

@Asdfg的十進制值,SQL不會讓你忽略它們,除非你明確地告訴它這樣做。一種方法是按照建議「CAST」。另一種方法是不要把它們放在首位。 –

1

使用SELECT CAST(ROUND('32.999',0,1) AS INT)和它工作得很好。

+1

請記住,如果您嘗試舍入的值爲'32.9',則結果爲33. 但是,Round('32 .000',0,1)將在32中正確生成。 http: //msdn.microsoft.com/en-us/library/ms175003.aspx – Zhais

+0

正確。我也注意到了。感謝您指出了這一點。 – Asdfg

相關問題