我想验证一个字段,
如果字段仅为12345,则不返回
<代码>G29,则返回1
基本上,只要检查这个字段中是否有一个非数字字符,但是允许破折号在其中。
以下是我的想法:
select 1
from dbo.random.field
where ISNUMBERIC(field)=0 and field not like '%-%'使用它来检查是否有字母,然后检查是否有-,但是我的测试用例总是这样:
Failed
Pass
那我在这里做错什么了?
发布于 2021-03-21 19:21:04
让我假设您使用的是基于isnumeric()的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'), ('1234-1'), ('a12341'), ('34j123'), ('99933hh'), ('a1234-'), ('sodf233-')) v(field)
where field like '%[^-0-9]%';发布于 2021-03-21 19:34:40
所以这就是我最后所做的
like '%[^-0-9]%'https://stackoverflow.com/questions/66736544
复制相似问题