в sql есть оператор LOCATE() для поиска подстроки в столбце базы данных
SELECT * FROM magazin WHERE LOCATE('стол',text) ORDER BY id DESC LIMIT 3
есть ли какой то противоположный оператор? если этот работает на "поле содержит подстроку" как можно сделать запрос наоборот "поле не должно содержать подстроку"?
в 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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
пытаюсь составить такой запрос для вывода данных, где хочу вывести на экран бригаду, имя и фамилию работника, адрес, тип работы, дату начала...
Возможно я вообще не понимаю как работает cursor при работе с бд, но проблема такаяЯ делаю discord бота и когда пользователь вводит команду он должен...