Sql server 2005 如何在T-SQL中获取字符串是否为数字

Sql server 2005 如何在T-SQL中获取字符串是否为数字,sql-server-2005,tsql,Sql Server 2005,Tsql,在MS SQL 2005中,如果字符串是整数(仅由数字组成),是否有一种简单的方法可以获取 谢谢您的帮助。请参阅: 创建函数dbo.IsInteger(@Value VarChar(18)) 返回位 作为 开始 返回值为空( (当CharIndex('.',@Value)>0时选择大小写) 转换时的大小写(int,ParseName(@Value,1))0 然后0 其他1 终点 其他1 终点 其中IsNumeric(@Value+'e0')=1),0) 终点 函数ISNUMERIC返回字符串是否

在MS SQL 2005中,如果字符串是整数(仅由数字组成),是否有一种简单的方法可以获取

谢谢您的帮助。

请参阅:

创建函数dbo.IsInteger(@Value VarChar(18))
返回位
作为
开始
返回值为空(
(当CharIndex('.',@Value)>0时选择大小写)
转换时的大小写(int,ParseName(@Value,1))0
然后0
其他1
终点
其他1
终点
其中IsNumeric(@Value+'e0')=1),0)
终点

函数ISNUMERIC返回字符串是否为数字,但对于非整数将返回true

因此,您可以使用:

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

标准T-SQL函数
ISNUMERIC(表达式)

确定表达式是否为有效的数字类型。

可以使用LIKE运算符:

WHERE str NOT LIKE '%[^0-9]%'

要保证一个值符合4字节整数有点棘手

由于您使用的是2005-一种方法是尝试在try/catch块中转换值。这将是确保它实际上是一个int的最好方法。当然,您需要根据您的要求处理它不在catch块中的情况

仅测试“数字”的另一种方法是:

其中strVal不象“[^0-9]%

那将错过-25。以及允许“99999999999999999”
因此,您可能需要在该方法中包含其他条件。

尽管原始海报是指SQL 2005,但我在2008 r2中发现一个直接的
,其中isnumeric(string)
导致错误4145非布尔类型。要解决此问题,请使用:
其中isnumeric(string)=1
使用
(CAST(PATINDEX('%[^0-9]]',value)作为位))
确实处理所有字符

有效的数字类型,尽管它不关心整数、十进制、货币还是浮点。OP明确地询问了整数。像
'>'
'0d0'
这样的字符串是什么
ISNUMERIC
仍将返回
1
。我认为逐字排除没有帮助,因为我们可以有多种组合。例如:特殊字符、字母表等。使用与“[^0-9]”不同的
LTRIM(RTRIM(str))
在数字周围留出空白。
WHERE str NOT LIKE '%[^0-9]%'