MySQL 使用 LIKE 和 WHERE 选择

Posted

技术标签:

【中文标题】MySQL 使用 LIKE 和 WHERE 选择【英文标题】:MySQL Select with LIKE and WHERE 【发布时间】:2011-05-12 18:08:19 【问题描述】:

我有一个传记数据表,我需要执行一个查询来选择在他们的传记中包含“死亡”一词且死亡日期为 NULL 的人。这不起作用:

SELECT * FROM people
WHERE bio LIKE '%died%'
AND death_date IS NULL

这会选择死亡日期为空的每个人,但也会选择生物中没有“死亡”一词的人。我可以在一个查询中执行此操作吗?

【问题讨论】:

你确定它会返回那些在他们的简历中没有“死”的人吗?请记住,它还将包括包含 dead 的单词,例如 study 和 imbodied。 分享这样的示例数据。 【参考方案1】:

也许问题在于引号,使用 " 而不是 ' 来包装 LIKE 子句。

SELECT * FROM people
WHERE bio LIKE "%died%"
AND death_date IS NULL

【讨论】:

像这样运行查询会返回相同的结果。 “bio”字段是什么数据类型?【参考方案2】:

可能是“完全死亡”之类的词,但仍将被选中。仔细检查您选择的记录中是否不存在“死亡”短语作为某些单词的一部分。

【讨论】:

不要忘记,如果单词在简历的开头,则在“死”前面添加空格将不起作用。【参考方案3】:

我建议你将 bio 设为大写,并像 "%DIED%" 一样确保 death_date 真的为空,看看你是否从两个独立的案例中得到答案。你得到什么回应?

【讨论】:

单独使用 WHERE death_date IS NULL 返回 death_date 为 NULL 的人。 怎么样? WHERE UPPER(bio) LIKE '%DIED%'

以上是关于MySQL 使用 LIKE 和 WHERE 选择的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL SELECT WHERE LIKE WITH AES_ENCRYPT

使用 group by 和 like 语句时如何让 SQL 使用 where 条件

MySQL REPLACE 影响 0 行但 WHERE ... LIKE 返回 90

MySQL LIKE 子句

<mysql问题>如何同时使用between和like吗?

MySQL WHERE LIKE 语句:如何删除表中列子字符串不等于所需子字符串的行?