我需要选择名称中包含非字母数字值的行。我得到了解决方案的一部分,但是,我也得到了带有空格,连字符和单引号的行。因此,我需要提取带有字母数字的行,也不要提取带有空格以及-
和'
的行。
在网上做了一些研究
select *
from EMP
where NAME like '%[^a-z,1-9]%'
我不想获得带有-
或空格或'
的行
答案 0 :(得分:1)
这是一种使用数字表查找不良字符的方法:
create table #GoodLetters(letter char(1))
insert into #GoodLetters
values
('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j'),('k'),('l'),('m'),('n'),('o'),('p'),('q'),('r'),('s'),('t'),('u'),('v'),('w'),('x'),('y'),('z')
,('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9')
,('-'),(' '),('''')
--select * from #GoodLetters
select a._key, a.name,substring(a.name, v.number+1, 1)
from (select 'Your Key' _key,name from emp ) a
join master..spt_values v on v.number < len(a.name)
left join #GoodLetters GL on substring(a.name, v.number+1, 1)=GL.letter
where v.type = 'P'
and GL.letter is null
drop table #GoodLetters
答案 1 :(得分:0)
我认为应该这样:
select *
from EMP
where (NAME NOT LIKE '%-%' OR NOT LIKE '%[ ]%' OR NOT LIKE '%\'%' ESCAPE '\');
'%[]%'->为您提供一个或多个空格
ESCAPE->需要特殊字符
答案 2 :(得分:0)
您还可以在正则表达式中添加'
,-
和空格字符。
select *
from EMP
where NAME like '%[^a-z,1-9''- ]%'
答案 3 :(得分:0)
连字符有点棘手。因为它用于字符类,所以它必须是该类中的第一个字符。所以:
where name like '%[^- a-z,1-9]%'