2010-01-21 80 views

回答

15

ISNUMERIC返回一個字符串是否是數字,但對於非整數返回true的功能。

所以,你可以使用:

WHERE ISNUMERIC(str) AND str NOT LIKE '%.%' AND str NOT LIKE '%e%' AND str NOT LIKE '%-%' 
+3

什麼是一個像''£串''或''0d0''? 'ISNUMERIC'仍然會返回'1'。 – 2014-03-13 13:49:44

+0

我認爲按字符排除字符並沒有幫助,因爲我們可以有多個組合。例如:特殊字符,字母等 – Dev 2017-04-10 10:47:45

2

this

CREATE Function dbo.IsInteger(@Value VarChar(18)) 
Returns Bit 
As 
Begin 

    Return IsNull(
(Select Case When CharIndex('.', @Value) > 0 
       Then Case When Convert(int, ParseName(@Value, 1)) <> 0 
         Then 0 
         Else 1 
         End 
       Else 1 
       End 
     Where IsNumeric(@Value + 'e0') = 1), 0) 

End 
-1

斯坦達特T-SQL函數ISNUMERIC(表達) 確定表達式是否爲有效的數值類型。

+0

確實有效的數字類型,雖然它不關心整數,小數,金錢還是浮點數。 OP顯式詢問了整數。 – Joey 2010-01-21 13:49:06

5

您可以使用LIKE操作:

+1

使用'LTRIM(RTRIM(str))NOT LIKE'%[^ 0-9]%''來允許數字周圍出現空格。 – sparebytes 2015-10-07 17:41:59

1

這是一個有點棘手保證值將符合4字節整數。

由於您使用的是2005年 - 一種方法是嘗試轉換try/catch塊內的值。這將是確保它實際上是一個整數的最好方法。當然,您需要根據您的要求處理不在抓塊中的箱子。

另一種方式只是測試只對 「數字」 是這樣的:

其中strVal不LIKE '%[^ 0-9]%'

這將錯過-25。以及允許'99999999999999999999' 因此,您可能需要在此方法中包含其他條件。

15

即使原來的海報是指SQL 2005,我發現在2008 r2直where isnumeric(string)導致錯誤4145非布爾類型。要解決這一點:where isnumeric(string) = 1

0

使用〜(CAST(PATINDEX( '%[^ 0-9]%',值)作爲BIT))處理所有的字符

相關問題