在mySQL中,我有以下WHERE子句:
WHERE `candidates`.`availability` = "yes"
AND `candidates`.`playing_age` LIKE "%child, 20's%"
在我的数据库中,我有一行,其中playing_age列如下所示,
“孩子,青少年,20岁”
为什么我的WHERE子句中的LIKE不会返回此行,即使该行包含child和20?
答案 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%"