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 параметра. Я столкнулся с аналогичной проблемой, когда мне нужен был один подготовленный оператор, который должен работать с двумя разными способами: либо проверять конкретное значение в столбце, либо полностью игнорировать этот столбец.