2012-07-02 36 views
1

我有一個奇怪的問題。不能強制nvarchar浮動

在我的查詢中,我選擇了5列,其中兩個是nvarchar,其形式爲數字(僅包含數字和精度點),其他三個是uniqueIdentifiernvarchar

我想在我的SELECT語句中這兩列轉換爲Float但我得到一個錯誤

不能施放nvarchar的浮動。

我很多次檢查了所有這些值的格式。相信我,他們很好。

但是,當我只選擇這兩列並將它們強制浮動查詢成功運行。

我很感謝在這個問題上的任何幫助。

我也可以在這裏粘貼查詢。但整個查詢超過100行,這將是令人沮喪的寫作和閱讀!

+6

因此,不要張貼100線查詢,儘量減少查詢的大小降至可管理的範圍,但是*仍然存在問題*。通常,在嘗試這樣做的過程中,您會對潛在問題獲得新的見解 - 但現在的問題是,我懷疑我們可以幫助您。 –

+4

相信我,優化者對你沒有仇恨。如果沒有,你的調試必須意外「證明」某件事情沒有問題。你有沒有試過'從你的表中選擇cast(x作爲float)?如果這兩列中的任何一個都失敗,那麼您知道***至少有一個值與該演員表不兼容。然後嘗試'按照x asc'從yourTable順序選擇頂部100 x,然後'desc';問題的價值往往處於極端。 – MatBailie

+0

我試過這個。 「從你的表中選擇cast(x作爲float)」效果很好。當我選擇旁邊的另一列時,問題就會上升。 – Ashkan

回答

3

肯定會需要您提供更多信息纔回答。你能發佈你的一些代碼嗎(或者是你的問題的一小部分)?也許你的表格定義呢?

因爲所有的值都是數值,所以爲什麼要將該列作爲nvarchar?

最後,您的任何數據是否都包含美元符號($)?

這工作:

DECLARE @Text nvarchar(100) 

SET @Text = '1234.567' 

SELECT CONVERT(float, @Text) AS ColumnValue 

那麼,這是否:

DECLARE @Text nvarchar(100) 

SET @Text = ' 1234.567 ' 

SELECT CONVERT(float, @Text) AS ColumnValue 

但這並不:

DECLARE @Text nvarchar(100) 

SET @Text = '$1234.567' 

SELECT CONVERT(float, @Text) AS ColumnValue 
0

沒有看到您的查詢不知道,但我認爲這應該工作:

SELECT CONVERT(Float(2), LTRIM(RTRIM(<nVarchar Column>))) AS Amount FROM ...... 
+1

想知道爲什麼OP將金額保存爲nvarchar。 – abatishchev

+1

針對性能較差的設計。 – Geek