我有一個存儲爲varchar的十進制值的數據集。 我需要返回所有小於8.0的值。 這是我的查詢:將數據類型varchar轉換爲sql中的數值時出現錯誤當在條款中比較值時
;WITH CTE
AS
(
SELECT PatientEncounterID, CAST(value as numeric(3,1)) As Value
from Observation
where Term = 'HGBA1C' AND isnumeric(value) = 1
)
SELECT *
FROM CTE
WHERE Value < 8.0
當我運行此查詢我得到的錯誤:
converting data type varchar to numeric
當我運行的查詢,而無需在where子句中值的範圍從5.0到16.9。 另一列僅僅是一個標識字段。 將Value
字段轉換爲CTE查詢中的數字。
爲什麼可以在where子句中出錯?
UPDATE 總的行數是228.應該有144個返回,但只返回39個。
http://stackoverflow.com/q/41109677/6167855 – scsimon
小心使用ISNUMERIC隔離是值實際上數字。事物「1e8」,「¢」,「$」。將全部用isnumeric評估爲1,但會用謂詞拋出異常。對我來說,你最大的問題就是在varchar列中存儲你確定的十進制數。你顯然有一些實際上不是小數的值。 –