SQL: Like и NOT LIKE?
Стандартная задача: в таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра).
Вывод: номер модели, тип модели.
Правильный ответ:
SELECT model, type FROM Product WHERE model NOT like '%[^0-9]%' OR upper(model) NOT like '%[^A-Z]%' |
SELECT model, type FROM Product WHERE model NOT like '%[^0-9]%' OR upper(model) NOT like '%[^A-Z]%'
Не могу понять, почему именно NOT LIKE, а не просто LIke в запросе? Разве NOT like '%[^....] не является просто LIKE как двойное отрицание?
Дополнительно:
Это какой диалект SQL? не припомню чтобы LIKE работал с регулярными выражениями
Не могу понять, почему именно NOT LIKE, а не просто LIke в запросе ? Разве NOT like '%[^....] не является просто LIKE как двойное отрицание ?
Потому что кроме цифр и букв есть и другие символы, которые ты можешь замаскировать шаблонным символом процента.
А ещё потому что в шаблоне LIKE невозможно задать начало и конец тестируемого выражения.
В простом LIKE ты, например, задашь выражение "в проверяемом значении есть цифры". Согласись, это совсем не то же самое, чем "в проверяемом значении нет не-цифры".
Ответы:
LIKE не работает с регулярками. В этом твоя ошибка
- Это неверное утверждение. LIKE использует свой особый сильно кастрированный вариант регулярных выражений с минимумом шаблонных конструкций (всего два подстановочных символа плюс экранирующий). Но тем не менее это именно вариант регулярного выражения.
- Akina, я ответил применительно к тому запросу, который написал автор вопроса. А у него именоо полноценное регулярное выражение
- Agent Smith, если я правильно догадываюсь, то речь о задачке с sql-ex. А там SQL Server, который трактует LIKE чуть пошире - в частности, понимает в шаблоне LIKE группы символов в квадратной скобке. https://docs.microsoft.com/ru-ru/sql/t-sql/languag...
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Операторы LIKE и NOT LIKE в SQL используются для сравнения значений строковых данных с шаблонами. LIKE используется для поиска строк, которые соответствуют определенному шаблону, а NOT LIKE для поиска строк, которые не соответствуют шаблону.
Оператор LIKE позволяет использовать специальные символы для создания шаблонов. Например, символ "%" обозначает любую последовательность символов, а "_" - один любой символ. Таким образом, запрос "SELECT * FROM table WHERE column LIKE 'abc%'" вернет все строки, в которых значение столбца column начинается с "abc".
Оператор NOT LIKE, как следует из названия, исключает строки, которые соответствуют шаблону. Например, запрос "SELECT * FROM table WHERE column NOT LIKE '%xyz%'" вернет все строки, в которых значение столбца column не содержит подстроку "xyz".
Операторы LIKE и NOT LIKE могут быть использованы совместно с другими операторами, такими как AND, OR и IN, для создания более сложных условий поиска. Например, запрос "SELECT * FROM table WHERE column LIKE 'a%' AND column NOT LIKE '%b%'" вернет все строки, в которых значение столбца column начинается с буквы "a" и не содержит букву "b".
Использование операторов LIKE и NOT LIKE позволяет эффективно фильтровать данные в SQL и находить нужную информацию с помощью заданных шаблонов. Однако следует помнить, что использование LIKE с шаблонами, начинающимися с "%", может привести к медленной работе запросов из-за неэффективного использования индексов. Поэтому при составлении запросов с использованием LIKE и NOT LIKE стоит учитывать особенности работы с индексами и оптимизировать запросы для повышения производительности базы данных.