SQL Server:如何测试字符串是否只有数字字符

时间:2015-02-06 16:26:24

标签: sql sql-server sql-server-2008

我在SQL Server 2008中工作。我正在尝试测试字符串(varchar)是否只有数字字符(0-9)。我知道IS_NUMERIC函数可以产生虚假结果。 (我的数据可能有$符号,不应该通过测试。)所以,我避免了这个功能。

我已经测试过一个字符串是否有任何非数字字符,即

some_column LIKE '%[^0123456789]%'

我认为唯一的数字测试会是类似的,但我会画一个空白。有什么想法吗?

7 个答案:

答案 0 :(得分:48)

使用Not Like

where some_column NOT LIKE '%[^0-9]%'

演示

declare @str varchar(50)='50'--'asdarew345'

select 1 where @str NOT LIKE '%[^0-9]%'

答案 1 :(得分:7)

对于SQL 2008及更高版本,有一个名为ISNUMERIC的系统函数。一个例子:

SELECT myCol
FROM mTable
WHERE ISNUMERIC(myCol)<> 1;

我做了几个快速测试,并进一步研究了文档:

ISNUMERIC returns 1 when the input expression evaluates to a valid numeric data type; otherwise it returns 0.

这意味着它可以预测,例如

-9879210433会通过但987921-0433没有。 $9879210433会过去,9879210$433不会。

因此,使用此信息,您可以根据list of valid currency symbols+&amp; -个字符。

答案 2 :(得分:1)

有效的方法。上面使用的方式是行不通的。

var stripe = Stripe('pk_xxx');

答案 3 :(得分:0)

DECLARE @x int=1
declare @exit bit=1
WHILE @x<=len('123c') AND @exit=1
BEGIN
IF ascii(SUBSTRING('123c',@x,1)) BETWEEN 48 AND 57
BEGIN
set @x=@x+1
END
ELSE
BEGIN
SET @exit=0
PRINT 'string is not all numeric  -:('
END
END

答案 4 :(得分:0)

解决方案:     其中some_column不喜欢'%[^ 0-9]%' 是正确的。

重要的一点:当字符串列=时添加验证。这种情况也会返回“”也是有效数字。

答案 5 :(得分:0)

我试图只查找带有数字的字符串,没有标点符号或其他任何东西。我终于找到了一个可行的答案here

使用PATINDEX('%[^ 0-9]%',some_column)= 0使我可以过滤除实际数字字符串以外的所有内容。

答案 6 :(得分:0)

所选答案无效。

declare @str varchar(50)='79D136'
select 1 where @str NOT LIKE '%[^0-9]%'

我没有解决方案,但是知道这个潜在的陷阱。如果用科学记号“ E”代替字母“ D”,情况也是如此。