2010-01-21 78 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))处理所有的字符

相关问题