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

sky*_*e01 33 sql sql-server sql-server-2008

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

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

some_column LIKE '%[^0123456789]%'
Run Code Online (Sandbox Code Playgroud)

我认为唯一的数字测试会是类似的,但我画了一个空白.有任何想法吗?

Pரத*_*ீப் 56

使用 Not Like

where some_column NOT LIKE '%[^0-9]%'
Run Code Online (Sandbox Code Playgroud)

演示

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

select 1 where @str NOT LIKE '%[^0-9]%'
Run Code Online (Sandbox Code Playgroud)

  • 你用的是双重否定。(`^` 否定字符类)。为什么不直接使用`where some_column LIKE '%[0-9]%'`? (2认同)
  • @jpaugh - 因为要求是查找字符串是否只有数字.您的查询也将返回字母数字字符串. (2认同)

Ben*_*ius 8

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

SELECT myCol
FROM mTable
WHERE ISNUMERIC(myCol)<> 1;
Run Code Online (Sandbox Code Playgroud)

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

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

这意味着它是相当可预测的例子

-9879210433会通过,但987921-0433不会. $9879210433会通过,但9879210$433不会.

因此,使用这些信息,你可以基于上剔除掉有效的货币符号列表+&-字符.