MySQL Wildcard для "=" - есть ли - PullRequest
       13

MySQL Wildcard для "=" - есть ли

18 голосов
/ 30 апреля 2009

Итак,

SELECT * FROM table WHERE col LIKE '%'

вернет все. Есть ли подстановочный знак для запроса

SELECT * FROM table WHERE col = '*'

Понятно, * не работает, я просто положил его, чтобы указать, где я хочу подстановочный знак. Столбец, из которого я выбираю, содержит целое число от 1 до 12, и я хочу иметь возможность выбрать либо все записи с определенным номером, либо все записи с подстановочным знаком.

Спасибо

Ответы [ 8 ]

13 голосов
/ 30 апреля 2009

LIKE в основном совпадает с =, за исключением того, что LIKE позволяет использовать подстановочные знаки.

Эти два запроса будут возвращать одинаковые результаты:

SELECT * FROM table WHERE col LIKE 'xyz';
SELECT * FROM table WHERE col='xyz';

Без '%' в запросе LIKE он фактически совпадает с '='.

Если вы делаете выбор в целочисленном столбце, вам следует рассмотреть возможность использования операторов IN () или BETWEEN. Похоже, что у вас есть два отдельных условия, которые должны обрабатываться в вашем коде, а не в запросе, поскольку ваши условия диктуют, что вам нужно как минимум два разных типа запросов.

Редактировать: Я должен уточнить, что LIKE и = похожи только в обычном, смешном использовании сравнения строк. Вам следует проверить Руководство по MySQL для получения подробных сведений о том, как это работает, поскольку существуют ситуации, когда это не совпадает (например, наборы языков).

8 голосов
/ 30 апреля 2009

Если вы хотите выбрать все, почему вы вообще присоединяете предложение WHERE? Просто оставьте это условно, вместо того, чтобы вставлять в него шаблон.

7 голосов
/ 30 апреля 2009

Причина использования LIKE заключается в том, что = не поддерживает подстановочные знаки. В противном случае не было бы причин для LIKE

0 голосов
/ 27 октября 2015

Если ваши значения находятся в диапазоне (1,12), то:

выберите * из таблицы, где col> = 5 и col <= 5; // это равно col = 5 </p>

выберите * из таблицы, где col> = 0 и col <= 12; // это равно col = любое значение </p>

Одна и та же строка может произвести оба эффекта, выбрав 2 параметра соответствующим образом. Я столкнулся с подобной проблемой, когда мне нужно было одно подготовленное утверждение, которое должно работать двумя различными способами: либо для проверки определенного значения в столбце, либо для полного игнорирования этого столбца.

0 голосов
/ 12 мая 2015

Я сталкивался с таким случаем при создании хранимой процедуры для отчета. Вот мое решение, надеюсь, это то, что вы имели в виду:)

set @p = "ALL";

Запрос:

select * from fact_orders
where
dim_country_id = if(@p is null or @p="ALL", dim_country_id, @p)
limit 10
;
0 голосов
/ 30 апреля 2009

Ответ зомбата великолепен, но я заметил только в его ответе, что вы выбираете целые числа. Он упомянул IN () и МЕЖДУ (). Вот примеры использования этих синтаксисов, а также некоторых других опций, которые вы используете для целочисленного поля.

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);
0 голосов
/ 30 апреля 2009

Предполагая, что ваш запрос основан на параметрах, оператор case, вероятно, подходит

select * from mytable
where col like case when @myvariable is null then % else myvariable end

Где @myvariable равно нулю, если вы не хотите использовать значение, иначе оно будет использовать целочисленное значение, которое вы передаете.

0 голосов
/ 30 апреля 2009
SELECT * FROM table WHERE col RLIKE '.*'

т.е. регулярное выражение LIKE.

...