我在SQL Server 2008中工作。我正在尝试测试字符串(varchar)是否只有数字字符(0-9)。我知道IS_NUMERIC函数可以产生虚假结果。 (我的数据可能有$符号,不应该通过测试。)所以,我避免了这个功能。
我已经测试过一个字符串是否有任何非数字字符,即
some_column LIKE '%[^0123456789]%'
我认为唯一的数字测试会是类似的,但我会画一个空白。有什么想法吗?
答案 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”,情况也是如此。