下面是我正在使用的那種表結構和數據的子集。將varchar轉換爲數據類型數值的算術溢出錯誤。 '10'<= 9.00
CREATE TABLE #Test
(
Val varchar(5)
,Type varchar(5)
)
INSERT #Test VALUES ('Yes','Text')
INSERT #Test VALUES ('10','Int')
INSERT #Test VALUES ('10.00','Float')
INSERT #Test VALUES ('9.00','Float')
INSERT #Test VALUES ('9','Int')
我想編寫一個查詢,讓我知道,如果列「瓦爾」是< = 9.00(必須是數字數據類型)。我做了以下操作:
SELECT *
FROM
(
SELECT Val
FROM #Test
WHERE Type = 'Int'
) IntsOnly
WHERE IntsOnly.Val <= 9.00
這給了我一個算術溢出錯誤。但是,如果我排除的數據行,其值爲「10」:
SELECT *
FROM
(
SELECT Val
FROM #Test
WHERE Type = 'Int'
AND Val <> '10'
) IntsOnly
WHERE IntsOnly.Val <= 9.00
這工作沒有任何問題。 我的問題不是如何解決這個問題,因爲我知道我可以簡單地將數據轉換爲我需要的格式。
我的問題是爲什麼'Val'列'10'的值返回錯誤。當然,邏輯應該返回'False',並簡單地排除這些行,因爲'10'(我假設是隱式轉換的)大於9.00。
謝謝。
算術溢出錯誤,你確定嗎?不是[轉換錯誤](http://stackoverflow.com/q/9136722/11683)? – GSerg
嘗試在轉換中顯式***。 CAST(val AS DECIMAL(9,2))<= CAST(9.00 AS DECIMAL(9,2))給出了什麼? – MatBailie
GSerg - 是的,算術溢出將varchar轉換爲數字。德姆斯 - 這確實有用!但是,我想了解爲什麼隱式轉換不起作用?我的想法是,它可以做這種轉換,不應該引起問題? – JBond