下面是一些測試SQL。 IsNumeric表示05031,
的子字符串是數字,但由於,
而試圖將其轉換爲實際數字時失敗。這是SQL中的錯誤嗎?在t-sql中使用IsNumeric問題?
DECLARE @Str NVARCHAR(20)
SET @Str = 'XYZ 505031, some text'
SELECT CASE WHEN ISNUMERIC(SUBSTRING(@Str,6,7)) = 1 THEN CONVERT(int,SUBSTRING(@Str,6,7)) ELSE 0 END, SUBSTRING(@Str,6,7)
不是一個錯誤。該功能是有史以來最糟糕的命名功能。當該值能夠轉換爲遠程類似於數字的數種數據類型時,它的計算結果爲true。這是關於這個話題的更好的文章之一。 http://www.sqlservercentral.com/articles/ISNUMERIC()/71512/ –
在這種情況下,雖然它不是'ISNUMERIC'的問題,但事實上,使用您的區域設置,您無法將數字以'INT'作爲逗號,但如果您嘗試將其轉換爲支持逗號的數字數據類型(例如'MONEY',yikes),則不存在問題 – Lamak
@SeanLange謝謝您,它是一個愚蠢的函數。我將它更改爲TRY_PARSE並且工作得更好 – collinszac10