下面我查詢的一部分,最初失敗:什麼是ISNUMERIC函數在sql server中發現爲TRUE的所有值?
WHEN ISNUMERIC(npx.nvcAnswer) = 1
THEN CASE
WHEN ABS(CONVERT(DECIMAL(38,2),npx.nvcAnswer)) < 1
THEN CONVERT(VARCHAR,CONVERT(DECIMAL(38,2),npx.nvcAnswer))
ELSE npx.nvcAnswer
END
下面是我們得到的錯誤:
com.microsoft.sqlserver.jdbc.SQLServerException:錯誤的數據類型爲nvarchar轉換爲數字。 rootCause複製=的SQLException#1:錯誤碼:8114 SQLSTATE:S0005信息:錯誤數據類型爲nvarchar轉換爲數字。
我意識到,它認爲'.'
& '-'
爲數字了。
因此,我增加"NOT npx.nvcAnswer in('.' , '-')"
它和它的工作。
WHEN ISNUMERIC(npx.nvcAnswer) = 1 AND NOT npx.nvcAnswer in('.' , '-')
THEN CASE
WHEN ABS(CONVERT(DECIMAL(38,2),npx.nvcAnswer)) < 1
THEN CONVERT(VARCHAR,CONVERT(DECIMAL(38,2),npx.nvcAnswer))
ELSE npx.nvcAnswer
END
經過一天,它開始失敗,再次出現以下錯誤。
com.microsoft.sqlserver.jdbc.SQLServerException:將數據類型nvarchar轉換爲數字時出錯。 rootCause複製=的SQLException#1:錯誤碼:8114 SQLSTATE:S0005信息:錯誤數據類型爲nvarchar轉換爲數字。
然後,我改變了下面的框和它的工作:(但我沒能找到什麼樣的價值觀是導致此問題)
OLD:
WHEN ABS(CONVERT(DECIMAL(38,2),npx.nvcAnswer)) < 1
THEN CONVERT(VARCHAR,CONVERT(DECIMAL(38,2),npx.nvcAnswer))
新:
WHEN ABS(CONVERT(DECIMAL(38,2),PATINDEX('%[^0-9]%', npx.nvcAnswer))) < 1
THEN CONVERT(VARCHAR,CONVERT(DECIMAL(38,2),PATINDEX('%[^0-9]%', npx.nvcAnswer)))
問:
什麼是SQL Server的所有值ISNUMERIC函數發現爲真?
太長上市。即有些僅在某些組合中有效,如'1d1'。相反,如您所做的那樣,請使用您認爲有效的字符白名單。 'ISNUMERIC'回答了人們從未想過要問的問題 - 「這個字符串可以轉換爲*任何*的數字數據類型(我不關心*它可以轉換成哪種類型)? 「 –