我正在使用 SQL Server 2008。我想测试一个字符串(varchar)是否只包含数字字符(0-9)。我知道 IS_NUMERIC 函数可能会给出虚假结果。(我的数据可能有美元符号,这些符号不应该通过测试。)因此,我避免使用那个函数。
我已经有了一个测试来查看字符串中是否有任何非数字字符,即,
some_column LIKE '%[^0123456789]%'
我认为只有数字的测试应该类似,但是我暂时想不出来。有什么想法吗?
我正在使用 SQL Server 2008。我想测试一个字符串(varchar)是否只包含数字字符(0-9)。我知道 IS_NUMERIC 函数可能会给出虚假结果。(我的数据可能有美元符号,这些符号不应该通过测试。)因此,我避免使用那个函数。
我已经有了一个测试来查看字符串中是否有任何非数字字符,即,
some_column LIKE '%[^0123456789]%'
我认为只有数字的测试应该类似,但是我暂时想不出来。有什么想法吗?
使用 Not Like
where some_column NOT LIKE '%[^0-9]%'
declare @str varchar(50)='50'--'asdarew345'
select 1 where @str NOT LIKE '%[^0-9]%'
^
取消字符类)。为什么不直接使用 where some_column LIKE '%[0-9]%'
? - jpaughwhere some_column NOT LIKE '%[^0-9]%'
是正确的。''
(空字符串)的情况下添加验证。这种情况将返回''
也是一个有效数字。这是一种可行的方法。上面使用的方式不会起作用。
declare @str varchar(50)='79136'
select
case
when @str LIKE replicate('[0-9]',LEN(@str)) then 1
else 0
end
declare @str2 varchar(50)='79D136'
select
case
when @str2 LIKE replicate('[0-9]',LEN(@str)) then 1
else 0
end
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
它正常工作了!!!
SELECT my_field FROM my_table WHERE REGEXP_LIKE(my_field, '[^0-9]') - only with char
SELECT my_field FROM my_table WHERE REGEXP_LIKE(my_field, '[0-9]') - only numbers
declare @str varchar(50)='79D136'
select 1 where @str NOT LIKE '%[^0-9]%'
我没有解决方案,但知道这个潜在的陷阱。如果您将字母“D”替换为科学计数法中的“E”,情况也是如此。
some_colum NOT LIKE '%[^0-9]%'
- ckerth