sql LIKE没有返回预期的行

时间:2011-12-05 13:04:40

标签: mysql sql where

在mySQL中,我有以下WHERE子句:

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

在我的数据库中,我有一行,其中playing_age列如下所示,

  

“孩子,青少年,20岁”

为什么我的WHERE子句中的LIKE不会返回此行,即使该行包含child和20?

4 个答案:

答案 0 :(得分:2)

应该是

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

您想要返回的结果将不会返回,因为字符串中间没有通配符。

答案 1 :(得分:1)

这不匹配,应该是

"%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岁分成三个单独的栏目(如果使用EAV则分为3行),
你可以轻松做对比。

答案 2 :(得分:1)

LIKE“%child,20's%”表示:任何包含“child,20's”的内容。 “之前任何事情”的领先百分比 追踪“任何后”的%

对你的搜索来说更适合的是

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

这将允许儿童和儿童之间“匹配任何东西”。 20年代

请注意领先&尾随。*可能会被删除,结果仍然匹配。但不确定后者。

答案 3 :(得分:1)

%匹配任意数量的字符,甚至是零个字符。

当您执行LIKE "%child, 20's%"时,您遗漏了%child,之间的20's字符。因此,您需要添加额外的%

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