Не могу понять в чем разница между этими вариантами. Делал тестовое задание
В таблице Product найти модели, которые состоят только из цифр
Вывод: номер модели, тип модели.
мой запрос вернул правильные значения, но не прошел валидацию
Select model, type from product
where model like '%[0-9]%'
Но вот этот запрос работает правильно
SELECT model, type
FROM product
WHERE model not like '%[^0-9]%'
Во втором, мы отрицаем не вхождение символов. Так почему они разнятся, по логике вроде одно и то же.
Всё логично:
NOT LIKE %[^0-9]% = найди все строки, кроме тех, в которых есть хотя бы один символ, отличный от цифры LIKE %[0-9]% = найди все строки, в которых есть хотя бы одна цифра.Таким образом, первая команда вернёт только те строки, которые целиком состоят из цифр (если будет хоть одна не-цифра, тест не будет пройден), тогда как вторая вернёт все строки, в которых имеется хотя бы одна цифра, остальные символы могут быть любыми.
Обратите внимение, NOT LIKE %[^0-9]% = REGEXP '^[0-9]+$', однако REGEXP работает гораздо менее эффективно по сравнению с LIKE.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости