#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 (^
) в шаблоне; как указано в ответе. Использование aNOT LIKE
вернет строки, в которых они содержат только буквенно-цифровые символы, но после операции указано обратное.3. Хорошо, я полагаю, вы возвращаете строки, которые не удовлетворяют
should only contain letters and numbers and no other character
и, следовательно, должны быть исключены. понял.4. Да, операция выполняется после строк, которые нарушают правила, @GeorgeMenoutis . Это может быть выведено из их собственной попытки, хотя они явно не указывают это. Ранее были комментарии под ответом, в которых это тоже обсуждалось.