有没有一种简单的方法在 MS SQL 2005 中判断字符串是否为整数(由数字组成)?
谢谢您的帮助。
有没有一种简单的方法在 MS SQL 2005 中判断字符串是否为整数(由数字组成)?
谢谢您的帮助。
函数ISNUMERIC返回一个字符串是否为数值,但对于非整数也会返回True。
因此,您可以使用以下代码:
WHERE ISNUMERIC(str) AND str NOT LIKE '%.%' AND str NOT LIKE '%e%' AND str NOT LIKE '%-%'
where isnumeric(string)
会导致错误4145(非布尔类型)。为了解决这个问题,请使用:where isnumeric(string) = 1
。WHERE str NOT LIKE '%[^0-9]%'
LTRIM(RTRIM(str)) NOT LIKE '%[^0-9]%'
可以允许数字周围有空格。 - sparebytesCREATE 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
保证一个值符合4字节整数的要求有点棘手。
既然您正在使用2005 - 一种方法是尝试在try/catch块中转换该值。这将是确保它实际上是int的最佳方法。当然,您需要根据自己的要求在catch块中处理它不符合条件的情况。
另一种仅测试“数字”的方法是:
where strVal not like '%[^0-9]%'
这将错过-25.以及允许'99999999999999999999',因此您可能需要使用此方法包括其他标准。
使用(CAST(PATINDEX('%[^0-9]%', value) as BIT))
处理所有字符
标准T-SQL函数ISNUMERIC(expression)
用于确定表达式是否为有效的数值类型。
'£'
或者'0d0'
这样的字符串怎么办?ISNUMERIC
仍然会返回1
。 - Tim Schmelter