用于返回包含特定单词的行的Mysql查询

用于返回包含特定单词的行的Mysql查询,mysql,Mysql,我有一个数据库,表名为Publisher,表中有一列名为Publisher\u Name。我希望返回所有包含单词“and”的名称,但不返回单个单词中包含“and”的顺序。例如,我想返回“泰晤士河和哈德逊河”,但不是“兰登书屋” 这是我知道的唯一返回带有特定单词的短语的方法 SELECT PUBLISHER_NAME FROM PUBISHER WHERE PUBLISHER_NAME LIKE '%and%'; 不过,上述声明将返回类似“兰登书屋”的内容 如何编辑此语句以仅返回所需内容?您应该

我有一个数据库,表名为Publisher,表中有一列名为Publisher\u Name。我希望返回所有包含单词“and”的名称,但不返回单个单词中包含“and”的顺序。例如,我想返回“泰晤士河和哈德逊河”,但不是“兰登书屋”

这是我知道的唯一返回带有特定单词的短语的方法

SELECT PUBLISHER_NAME
FROM PUBISHER
WHERE PUBLISHER_NAME LIKE '%and%';
不过,上述声明将返回类似“兰登书屋”的内容


如何编辑此语句以仅返回所需内容?

您应该能够使用REGEXP执行此操作

SELECT PUBLISHER_NAME
FROM PUBISHER
WHERE PUBLISHER_NAME REGEXP '[[:<:]]and[[:>:]]';
选择发布者名称
来自PUBISHER
其中PUBLISHER_NAME REGEXP'[[::]]';

这似乎是可行的,在Barmar的帮助下,将正则表达式更改为MySQL可以接受的形式:)

我建议您使用
匹配…对
进行匹配,但是您的
发布者名称
字段应该位于
全文索引中

您可以找到一些信息

您的查询如下所示:

SELECT PUBLISHER_NAME
FROM PUBISHER
WHERE MATCH (PUBLISHER_NAME)
AGAINST ('and' IN NATURAL LANGUAGE MODE)

如果在该列上创建
全文索引
,则可以搜索单个单词。如果使用该解决方案,请确保将最小索引字长(or)更改为3或更低,并覆盖默认的停止字列表(或删除“and”和任何其他要索引的常用字)

如果您想使用您的方法,您可以尝试这样的方法,但速度会很慢,因为它是用来进行表扫描的:

SELECT PUBLISHER_NAME
FROM PUBISHER
WHERE PUBLISHER_NAME LIKE '% and %'
OR PUBLISHER_NAME LIKE 'and %'
OR PUBLISHER_NAME LIKE '% and';

说真的…就这么简单。我一直在网上搜索,却找不到任何这样的东西。非常感谢。我猜最后一个字是不是,你也想要它?MySQL不使用PCRE转义序列。使用
[::]]
@Barmar aaah,我只是在尝试我的代码,很高兴知道^^以前在mysql中没有使用过regexp。你的查询仍然与
兰登书屋
匹配。你需要取出
%和%
@Barmar你是对的。我忘记了空格。现在修复。谢谢!