Отрицательный оператор LOCATE в sql запросе

97
23 апреля 2022, 07:20

в sql есть оператор LOCATE() для поиска подстроки в столбце базы данных

SELECT * FROM magazin WHERE LOCATE('стол',text) ORDER BY id DESC LIMIT 3

есть ли какой то противоположный оператор? если этот работает на "поле содержит подстроку" как можно сделать запрос наоборот "поле не должно содержать подстроку"?

Answer 1

в sql есть оператор LOCATE() для поиска подстроки в столбце базы данных

SELECT * FROM magazin WHERE LOCATE('стол',text) ORDER BY id DESC LIMIT 3

Ну, во-первых, это таки функция, а не оператор.

Во-вторых, в приведённом коде она используется вовсе не для поиска подстроки.

Как именно работает код?

Если подстрока есть - функция возвращает её смещение от начала. Смещение - целое число от 1 и более. При использовании во WHERE любое такое число интерпретируется как TRUE.

Если подстроки нет - функция возвращает ноль. При использовании во WHERE ноль интерпретируется как FALSE.

Если хотя бы один из параметров NULL - функция вернёт NULL. Во WHERE NULL интерпретируется как FALSE.

Как инвертировать действие? обычным оператором (на сей раз - действительно оператором) NOT (или его синонимом !). Он превратит TRUE в FALSE, а FALSE соответственно в TRUE. А вот NULL так и останется NULL.

Так что

SELECT * 
FROM magazin 
WHERE !LOCATE('стол',text) 
ORDER BY id DESC LIMIT 3
READ ALSO
Неожиданный токен

Неожиданный токен

Найдено 3 ошибок при анализе

236
Не работает Distinct в SQL

Не работает Distinct в SQL

пытаюсь составить такой запрос для вывода данных, где хочу вывести на экран бригаду, имя и фамилию работника, адрес, тип работы, дату начала...

247
Cursor не меняет значение pymysql

Cursor не меняет значение pymysql

Возможно я вообще не понимаю как работает cursor при работе с бд, но проблема такаяЯ делаю discord бота и когда пользователь вводит команду он должен...

211
MySQL обновить поле в таблице

MySQL обновить поле в таблице

Имеется таблица import_desc с полями sku и description

245