SQL Server中IsInteger的最佳等效项

May*_*ayo 31 regex sql t-sql sql-server

在SQL Server(2000/2005/2008)中确定字段值是否为整数的最佳方法是什么?

对于不太可能转换为整数的各种格式,IsNumeric返回true.例子包括'15,000'和'15 .1'.

您可以使用类似的声明,但这似乎只适用于具有预定位数的字段...

select * where zipcode like '[0-9][0-9][0-9][0-9][0-9]'
Run Code Online (Sandbox Code Playgroud)

我可以编写一个用户定义的函数,尝试将varchar参数转换为try/catch块中的int,但我正在检查社区是否有人遇到任何有用的方法来实现这个目标 - 最好是可以在SQL语句的where子句中使用,而不创建其他对象.

gbn*_*gbn 55

处理否定的后期进入

ISNUMERIC(zipcode + '.0e0') --integer
ISNUMERIC(zipcode + 'e0')  --decimal
Run Code Online (Sandbox Code Playgroud)

欲了解更多看到

  • 我发现`isnumeric(nullif(ltrim(rtrim(zipcode)),'')+'.0e0')`更接近地匹配普通`isnumeric`关于空格和空字符串的输出.这对某些人来说可能是理想的. (4认同)
  • ISNUMERIC是微软的一个秘密笑话。在所有情况下,`SELECT ISNUMERIC('$'),ISNUMERIC('-'),ISNUMERIC('+'),ISNUMERIC('。'),ISNUMERIC('\ 123')都会返回1(true)。在现实世界中,它没有任何价值。永远不要使用它。每次使用它时,它将遥测发送回MS笑话部门。每个月的最后一个星期五,各种SQL小组(ISNUMERIC,Unique NULLS,CSV导入等)聚集在一个办公室聚会上,看看谁获得了最高的傻瓜分数。 (2认同)

Ada*_*Dev 37

1方法是

zipcode NOT LIKE '%[^0-9]%'
Run Code Online (Sandbox Code Playgroud)

双重否定,得爱他们!


OMG*_*ies 6

如果是SQL Server 2005+,我将启用CLR并创建支持正则表达式的函数.对于SQL Server 2000,请参阅此文章以创建UDF以执行相同的操作.

然后我会使用正则表达式: ^\d{5}$


小智 5

此表达式为整数值提供 1,否则为 0

floor((floor(abs(zipcode)))/abs(zipcode))
Run Code Online (Sandbox Code Playgroud)