sql LIKE ни ожидаемых возвращаемых строк - PullRequest
1 голос
/ 05 декабря 2011

В mySQL у меня есть следующие предложения WHERE:

WHERE `candidates`.`availability` = "yes" 
AND `candidates`.`playing_age` LIKE "%child, 20's%"

В моей базе данных есть строка, в которой столбец playing_age выглядит следующим образом:

"ребенок, подросток, 20 лет"

Почему LIKE в моем предложении WHERE не возвращает эту строку, даже если строка содержит дочерние и 20-е?

Ответы [ 4 ]

2 голосов
/ 05 декабря 2011

Это должно быть

WHERE `candidates`.`availability` = "yes" 
AND `candidates`.`playing_age` LIKE "%child,%20's%"

Результат, который вы хотите вернуть, не вернется, потому что в середине строки не было подстановочного знака.

1 голос
/ 05 декабря 2011

% Соответствует любому количеству символов, даже нулю символов.

Когда вы делаете LIKE "%child, 20's%", вы пропускаете символ % между child, и 20's.Итак, вам нужно добавить дополнительные %:

WHERE `candidates`.`availability` = "yes" 
AND `candidates`.`playing_age` LIKE "%child,%20's%"
1 голос
/ 05 декабря 2011

LIKE "% child, 20's%" означает: все, что содержит в точности "child, 20's".ведущий% для "что-нибудь до", трейлинг% для "что-нибудь до" после "

. Что будет более подходящим для вашего поиска, будет

AND candidates.playing_age REGEXP ".*child,.*20's.*"

Это позволит" сопоставить что-нибудь "между child и20-е

Обратите внимание, что ведущий и трейлинг. * Могут быть удалены, а результат все равно совпадает.но не уверен в последнем.

1 голос
/ 05 декабря 2011

Это не соответствует, должно быть

"%child, %20's%"
mysql> select "child, teen, 20's" like "%child, 20's%";
+------------------------------------------+
| "child, teen, 20's" like "%child, 20's%" |
+------------------------------------------+
|                                        0 |
+------------------------------------------+

mysql> select "child, teen, 20's" like "%child, %20's%";
+-------------------------------------------+
| "child, teen, 20's" like "%child, %20's%" |
+-------------------------------------------+
|                                         1 |
+-------------------------------------------+

Тем не менее, ваш способ проектирования схемы совершенно не нормирован,
разделите ребенка, подростка, 20-х годов на три отдельных столбца (или 3 строки при использовании EAV),
, и вы можете легко сравнивать.

...