Sql server 2005 如何在T-SQL中获取字符串是否为数字
在MS SQL 2005中,如果字符串是整数(仅由数字组成),是否有一种简单的方法可以获取 谢谢您的帮助。请参阅: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返回字符串是否
创建函数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]%'