Я написал следующий запрос:
SELECT * from TABLENAME WHERE COLUMNNAME NOT LIKE ('%%%');
Предположим, что таблица имеет только один столбец. Проблема в том, что запрос распознает % внутри NOTLIKE не как символ, а как часть самого синтаксиса. Как это исправить?
Я думал заменить %
чем-то другим, а затем использовать это в условии, но мне больше нравится ответ @Akina!
В общем, никогда не используйте LIKE, когда вам нужно проверить определенный литерал. Он предназначен только для шаблонов.
Вот что я имел в виду:
SELECT * from TABLENAME WHERE REPLACE(COLUMNNAME,'%','findthis') NOT LIKE ('%findthis%');
Заменив символ на что-то другое, используйте его как условие в NOT LIKE
.
'findthis'
может встречаться в значении. Гарантированно должен использоваться литерал, отсутствующий в значении. Я предпочитаю CHAR(0)
...
Я принимаю это к сведению, @Akina. Спасибо!
вы можете использовать []
SELECT * from TABLENAME WHERE COLUMNNAME NOT LIKE ('%[%]%');
добра тебе, отлично!
Могу ли я узнать, какая версия MySQL может это сделать?
он используется на сервере sql, в mysql я не знаю
mysql не поддерживает это
У вас есть возможность экранирования символов:
SELECT * from TABLENAME WHERE COLUMNNAME NOT LIKE '%\%%';
Или:
SELECT * from TABLENAME WHERE COLUMNNAME NOT LIKE '%|%%' ESCAPE '|';
Это сработало просто отлично. Спасибо!
SELECT * FROM tablename WHERE !LOCATE('%', columnname);