LIKE %[0-9]% против NOT LIKE %[^0-9]%

108
17 июня 2021, 08:10

Не могу понять в чем разница между этими вариантами. Делал тестовое задание

В таблице Product найти модели, которые состоят только из цифр

Вывод: номер модели, тип модели.

мой запрос вернул правильные значения, но не прошел валидацию

Select model, type  from product
where model like '%[0-9]%'

Но вот этот запрос работает правильно

SELECT model, type
FROM product
WHERE model not like '%[^0-9]%'

Во втором, мы отрицаем не вхождение символов. Так почему они разнятся, по логике вроде одно и то же.

Answer 1

Всё логично:

  • NOT LIKE %[^0-9]% = найди все строки, кроме тех, в которых есть хотя бы один символ, отличный от цифры
  • LIKE %[0-9]% = найди все строки, в которых есть хотя бы одна цифра.

Таким образом, первая команда вернёт только те строки, которые целиком состоят из цифр (если будет хоть одна не-цифра, тест не будет пройден), тогда как вторая вернёт все строки, в которых имеется хотя бы одна цифра, остальные символы могут быть любыми.

Обратите внимение, NOT LIKE %[^0-9]% = REGEXP '^[0-9]+$', однако REGEXP работает гораздо менее эффективно по сравнению с LIKE.

READ ALSO
Как найти соответствие email из json с базой данных и записать данные в MySQL?

Как найти соответствие email из json с базой данных и записать данные в MySQL?

Пытаюсь в dle cms сохранять дополнительную информацию о пользователе в базу данных, при этом дополнительные данные получаю из JSON со стороннего...

91
Вывести картинки из одного поля

Вывести картинки из одного поля

В базе mysql в одном поле pic есть вот такие данные:

99
Вывод таблицы через RedBeanPHP

Вывод таблицы через RedBeanPHP

У меня такая проблема: есть бд, в которой есть таблица users, и мне нужно эту самую таблицу вывести, но выводится только слово 'Array' и больше ничегоВот...

81
Как сделать фильтр на продуктов на laravel

Как сделать фильтр на продуктов на laravel

Проблемма вот такаяЕсть у меня интернет магазин на Laravel 5

119