выберите строки, содержащие не алфавитно-цифровые - PullRequest
0 голосов
/ 01 июля 2019

Мне нужно выбрать строки, которые содержат не буквенно-цифровые значения в именах.Я получил часть решения, но я также получаю строки с пробелами, дефисами и одинарными кавычками.Итак, мне нужно тянуть строки с буквенно-цифровыми, а также не тянуть строки с пробелами и - и '.

Провел ли какое-либо исследование онлайн

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

Я не хочу получать строки с - или пробелами или '

Ответы [ 4 ]

1 голос
/ 01 июля 2019

Вот способ использования числовой таблицы для поиска плохих символов:

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
0 голосов
/ 01 июля 2019

Дефис немного хитрый. Поскольку он используется для классов символов, он должен быть первым символом в классе. Итак:

where name like '%[^- a-z,1-9]%'
0 голосов
/ 01 июля 2019

Вы также можете добавить ', - и пробелы в регулярное выражение.

select * 
from EMP  
where NAME like '%[^a-z,1-9''- ]%'
0 голосов
/ 01 июля 2019

Я думаю, это должно выглядеть так:

select * 
from EMP  
where (NAME NOT LIKE '%-%' OR NOT LIKE '%[ ]%' OR NOT LIKE '%\'%' ESCAPE '\');
  • '% []%' -> дает вам один или несколько пробелов

  • ESCAPE -> требуется для специального символа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...