选择包含非字母数字的行

时间:2019-07-01 13:26:06

标签: sql sql-server

我需要选择名称中包含非字母数字值的行。我得到了解决方案的一部分,但是,我也得到了带有空格,连字符和单引号的行。因此,我需要提取带有字母数字的行,也不要提取带有空格以及-'的行。

在网上做了一些研究

select * 
from EMP  
where NAME like '%[^a-z,1-9]%'

我不想获得带有-或空格或'的行

4 个答案:

答案 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]%'