2014-01-10 66 views
0

可能,這是一個衆所周知的問題,但我無法在文檔中找到答案。 如果我運行這些查詢:爲什麼我需要在查詢中使用CAST()?

SELECT @next := 2, @amount := 1; 

SELECT @next := 0.2, @amount := 0.1, @result := @next - @amount; 

我會得到錯誤@result =「0」

如果我跑第二查詢一次,結果將是正確的。

如果我在第二個查詢中使用類型轉換並再次運行兩個查詢,那麼結果也是正確的。即,

SELECT @next := 0.2, @amount := 0.1, @result := CAST(@next AS DECIMAL(2,2)) - @amount; 

爲什麼會發生?我應該閱讀什麼?

回答

2

我覺得發生了什麼事是你第一次@next:= 2,@amount = 1
然後讓@next和int類型的@amount。
因此,當您在此行上分配@next:= 0.2,@amount:= 0.1時@next的值爲零,@amount也是如此。 但在此選擇運行@next更改鍵入爲十進制。 要了解什麼是真正發生的事情試試這個

SELECT @next := 2, @amount := 1; 

SELECT @next := 0.2, @amount := 0.1, @next, @amount, @result := @next - @amount; 

SELECT @next,@amount; 

所以沒有投,只需設置你的第一個語句

SELECT @next := 2.0, @amount := 1.0; 

,一切都將開始爲小數並如預期正常工作了。

+0

啊,我明白 - 用戶變量保持其啓動類型,我需要明確地改變它,如果它不符合新的賦值的類型!謝謝。 –

0

該表達式具有與SQL CONVERT 表達式類似的語義。演員表達式用於將一種類型的值 轉換爲另一種類型的值。

DECIMAL有兩個部分:PrecisionScale。所以您的查詢的部分將是這樣的:

CAST(@next AS DECIMAL(2,2)) 

Precision代表的是存儲的值顯著位數。
Scale表示小數點後可以存儲的位數。

Read More

+0

是的,我明白什麼類型的鑄造。但爲什麼我需要它在我的例子? –

相關問題