如何解决^ 的通配符用法
我想验证一个字段,
- 如果字段只是数字,如 12345,则不返回任何内容
- 如果字段类似于 1234-1 或 -123331,则不返回任何内容
- 如果字段是 a12341、34j123 或 99933hh,则返回 1
- 如果字段是 a1234- 或 sodf233- 返回 1。
基本上只是检查这个字段中是否有非数字字符,但允许破折号出现。
这是我的想法:
select 1
from dbo.random.field
where ISNUMBERIC(field)=0 and field not like '%-%'
用这个来检查是否有字母,然后,如果有-,但我的测试用例总是这样:
- 12345 通行证
- 12345a 失败
- 12345- 通过
- 1234a- 通过,但这应该会失败。
那么我在这里做错了什么?
解决方法
让我假设您使用的是基于 isnumeric()
的 SQL Server。您可以使用 like
:
where field like 'a%[0-9]%' and
field not like 'a%[^-0-9]%'
第一个检查列是否以 'a'
开头并且至少有一个数字。第二个检查 'a'
后没有非数字或非连字符。
您可以使用 a
将 [a-z]
概括为任何字母(假设不区分大小写)或使用 [^0-9]
概括为任何非数字。
编辑:
对于您修改后的问题,您似乎只是想要一封信。您可以使用:
select *
from (values ('12345'),('1234-1'),('a12341'),('34j123'),('99933hh'),('a1234-'),('sodf233-')) v(field)
where field like '%[^-0-9]%';
,
这就是我最后所做的
like '%[^-0-9]%'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。