Показывать только строки, которые содержат только [a-z0-9]

#sql-server #regex #tsql

#sql-server #регулярное выражение #tsql

Вопрос:

У меня есть столбец varchar, который должен содержать только буквы и цифры и никаких других символов, например ; : , @ etc

Я думал, что это сработает, но это не так:

 select * from table
where field NOT LIKE '[a-z0-9]'
  

Ответ №1:

То, что вам на самом деле нужно, — это LIKE с не в шаблоне:

 SELECT *
FROM (VALUES('abc123'),('123'),('O''hare'),(' : , @'))V(field)
WHERE field LIKE '%[^a-z0-9]%';
  

Комментарии:

1. Забыл, not я думаю

2. Не уверен, что ты имеешь в виду, @GeorgeMenoutis? У этого конкретно нет NOT , у него есть not ( ^ ) в шаблоне; как указано в ответе. Использование a NOT LIKE вернет строки, в которых они содержат только буквенно-цифровые символы, но после операции указано обратное.

3. Хорошо, я полагаю, вы возвращаете строки, которые не удовлетворяют should only contain letters and numbers and no other character и, следовательно, должны быть исключены. понял.

4. Да, операция выполняется после строк, которые нарушают правила, @GeorgeMenoutis . Это может быть выведено из их собственной попытки, хотя они явно не указывают это. Ранее были комментарии под ответом, в которых это тоже обсуждалось.