Напишите SQL-запрос для печати слов, не содержащих символ «%» в таблице

Я написал следующий запрос:

SELECT * from TABLENAME WHERE COLUMNNAME NOT LIKE ('%%%');

Предположим, что таблица имеет только один столбец. Проблема в том, что запрос распознает % внутри NOTLIKE не как символ, а как часть самого синтаксиса. Как это исправить?

SELECT * FROM tablename WHERE !LOCATE('%', columnname);
Akina 10.12.2020 09:12

Я думал заменить % чем-то другим, а затем использовать это в условии, но мне больше нравится ответ @Akina!

FanoFN 10.12.2020 09:15

В общем, никогда не используйте LIKE, когда вам нужно проверить определенный литерал. Он предназначен только для шаблонов.

Akina 10.12.2020 09:16
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
3
3
570
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вот что я имел в виду:

SELECT * from TABLENAME WHERE REPLACE(COLUMNNAME,'%','findthis') NOT LIKE ('%findthis%');

Заменив символ на что-то другое, используйте его как условие в NOT LIKE.

'findthis' может встречаться в значении. Гарантированно должен использоваться литерал, отсутствующий в значении. Я предпочитаю CHAR(0)...
Akina 10.12.2020 10:14

Я принимаю это к сведению, @Akina. Спасибо!

FanoFN 11.12.2020 06:28

вы можете использовать []

SELECT * from TABLENAME WHERE COLUMNNAME NOT LIKE ('%[%]%');

добра тебе, отлично!

Mohammad 10.12.2020 09:29

Могу ли я узнать, какая версия MySQL может это сделать?

FanoFN 10.12.2020 09:31

он используется на сервере sql, в mysql я не знаю

ali sadeghi 10.12.2020 09:39

mysql не поддерживает это

ysth 10.12.2020 10:15
Ответ принят как подходящий

У вас есть возможность экранирования символов:

SELECT * from TABLENAME WHERE COLUMNNAME NOT LIKE '%\%%';

Или:

SELECT * from TABLENAME WHERE COLUMNNAME NOT LIKE '%|%%' ESCAPE '|';

Это сработало просто отлично. Спасибо!

Varun Sundararajan 10.12.2020 15:59

Другие вопросы по теме