^ 的通配符用法
Wildcard usage for ^
我要验证一个字段,
- 如果字段只有数字,如 12345,return 什么都没有
- 如果某个字段类似于 1234-1 或 -123331,return 什么都没有
- 如果字段是 a12341、34j123 或 99933hh return1
- 如果字段是 a1234- 或 sodf233- return 1.
基本上只检查此字段中是否有非数字字符,但允许包含破折号。
这是我的想法:
select 1
from dbo.random.field
where ISNUMBERIC(field)=0 and field not like '%-%'
用这个检查是否有字母,然后,如果有 -,但我的测试用例总是这样:
- 12345 通过
- 12345a 失败
- 12345-通过
- 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]%'
我要验证一个字段,
- 如果字段只有数字,如 12345,return 什么都没有
- 如果某个字段类似于 1234-1 或 -123331,return 什么都没有
- 如果字段是 a12341、34j123 或 99933hh return1
- 如果字段是 a1234- 或 sodf233- return 1.
基本上只检查此字段中是否有非数字字符,但允许包含破折号。
这是我的想法:
select 1
from dbo.random.field
where ISNUMBERIC(field)=0 and field not like '%-%'
用这个检查是否有字母,然后,如果有 -,但我的测试用例总是这样:
- 12345 通过
- 12345a 失败
- 12345-通过
- 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]%'