MySQL Wildcard для "=" - есть ли один
Итак,
SELECT * FROM table WHERE col LIKE '%'
вернет все. Есть ли шаблон для запроса
SELECT * FROM table WHERE col = '*'
Ясно, что *
не работает, я просто помещаю его туда, чтобы указать, где мне нужен шаблон. В столбце, который я выбираю, содержится целое число от 1 до 12, и я хочу иметь возможность выбирать либо все записи с определенным номером, либо все записи с подстановочным знаком.
Спасибо,
Ответы
Ответ 1
LIKE в основном совпадает с =, за исключением того, что LIKE позволяет использовать подстановочные знаки.
Эти два запроса возвратят те же результаты:
SELECT * FROM table WHERE col LIKE 'xyz';
SELECT * FROM table WHERE col='xyz';
Без "%" в запросе LIKE он фактически совпадает с "=".
Если вы делаете выбор в столбце целых чисел, вам следует рассмотреть возможность использования операторов IN() или BETWEEN. Похоже, у вас есть два отдельных условия, которые нужно обрабатывать в коде, а не в запросе, так как ваши условия диктуют, что вам нужны как минимум два разных типа запросов.
Изменить: я должен уточнить, что LIKE и = аналогичны только в обычном, обычном использовании сравнения строк. Вы должны проверить Руководство по MySQL для определения того, как это работает, поскольку есть ситуации, когда это не то же самое (например, языковые наборы).
Ответ 2
Если вы хотите выбрать все, почему вы вообще добавляете предложение WHERE? Просто оставьте это условно вместо того, чтобы вставлять в него шаблон.
Ответ 3
Причина использования LIKE заключается в том, что = не поддерживает поддержку подстановочных знаков. В противном случае нет причин для LIKE
Ответ 4
SELECT * FROM table WHERE col RLIKE '.*'
то есть. регулярное выражение LIKE.
Ответ 5
Предполагая, что ваш запрос задан параметром, вероятно, подходит аргумент case
select * from mytable
where col like case when @myvariable is null then % else myvariable end
Где @myvariable
является либо нулевым, если вы не хотите значения, иначе оно будет использовать целочисленное значение, которое вы передаете.
Ответ 6
zombat ответ велик, но я только заметил в его ответе, что вы выбираете целые числа. Он упомянул IN() и BETWEEN(). Здесь примеры с использованием этих синтаксисов, а также некоторые другие параметры, которые у вас есть для целочисленного поля.
SELECT * FROM table WHERE col = 1;
SELECT * FROM table WHERE col BETWEEN 1 AND 12;
SELECT * FROM table WHERE col BETWEEN 6 AND 12;
SELECT * FROM table WHERE col <= 6;
SELECT * FROM table WHERE col < 6;
SELECT * FROM table WHERE col >= 6;
SELECT * FROM table WHERE col > 6;
SELECT * FROM table WHERE col <> 6;
SELECT * FROM table WHERE col IN (1,2,5,6,10);
SELECT * FROM table WHERE col NOT IN (1,2,5,6,10);
Ответ 7
Я столкнулся с таким случаем при создании хранимой процедуры для отчета
Следующее мое решение, надеюсь, это то, что вы имели в виду:)
set @p = "ALL";
Query:
select * from fact_orders
where
dim_country_id = if(@p is null or @p="ALL", dim_country_id, @p)
limit 10
;
Ответ 8
Если ваши значения находятся в диапазоне (1,12), то:
выберите * из таблицы, где col >= 5 и col <= 5;//это равно col = 5
выберите * из таблицы, где col >= 0 и col <= 12;//это равно col = любое значение
В той же строке можно произвести оба эффекта, выбрав соответствующие 2 параметра.
Я столкнулся с аналогичной проблемой, когда мне нужен был один подготовленный оператор, который должен работать с двумя разными способами: либо проверять конкретное значение в столбце, либо полностью игнорировать этот столбец.