^ 的通配符用法

Wildcard usage for ^

我要验证一个字段,

  1. 如果字段只有数字,如 12345,return 什么都没有
  2. 如果某个字段类似于 1234-1 或 -123331,return 什么都没有
  3. 如果字段是 a12341、34j123 或 99933hh return1
  4. 如果字段是 a1234- 或 sodf233- return 1.

基本上只检查此字段中是否有非数字字符,但允许包含破折号。

这是我的想法:

select 1
from dbo.random.field
where ISNUMBERIC(field)=0 and field not like '%-%'

用这个检查是否有字母,然后,如果有 -,但我的测试用例总是这样:

  1. 12345 通过
  2. 12345a 失​​败
  3. 12345-通过
  4. 1234a- 通过,但这应该会失败。

那么我做错了什么?

假设您正在使用基于 isnumeric() 的 SQL 服务器。您可以使用 like:

where field like 'a%[0-9]%' and
      field not like 'a%[^-0-9]%'

第一个检查列是否以 'a' 开头并且至少有一个数字。第二个检查 'a'.

之后是否没有非数字或非连字符

您可以使用 [a-z](假设不区分大小写)将 a 泛化为任何字母,或者使用 [^0-9].

泛化为任何非数字

编辑:

对于你修改后的问题,你似乎只是想要一封信。您可以使用:

select *
from (values ('12345'), ('1234-1'), ('1234-1'), ('a12341'), ('34j123'), ('99933hh'), ('a1234-'), ('sodf233-')) v(field)
where field like '%[^-0-9]%';

这就是我最后所做的

like '%[^-0-9]%'