我有一个数据库,其中包含一个名为Publisher的表和该表中名为Publisher_Name的列。我想返回所有带有“和”字样的名字,但不是单词“和”作为单词中的序列。例如,我想要返回“Thames and Hudson”而不是“Random House”。
这是我知道返回带有特定单词的短语的唯一方法。
SELECT PUBLISHER_NAME
FROM PUBISHER
WHERE PUBLISHER_NAME LIKE '%and%';
上述陈述虽然会返回“Random House”等内容。
如何编辑此语句以仅返回我想要的内容?
答案 0 :(得分:0)
您应该可以使用REGEXP
执行此操作SELECT PUBLISHER_NAME
FROM PUBISHER
WHERE PUBLISHER_NAME REGEXP '[[:<:]]and[[:>:]]';
这似乎有效,在Barmar的帮助下将Regex改为MySQL接受的东西:)
答案 1 :(得分:0)
我建议您使用MATCH...AGAINST
,但PUBLISHER_NAME
字段应位于FULLTEXT index
您可以找到一些信息 here
您的查询如下:
SELECT PUBLISHER_NAME
FROM PUBISHER
WHERE MATCH (PUBLISHER_NAME)
AGAINST ('and' IN NATURAL LANGUAGE MODE)
答案 2 :(得分:0)
如果您在该列上创建FULLTEXT INDEX
,则可以搜索单个字词。如果您使用该解决方案,请务必将最小索引字长(ft_min_word_len或innodb_ft_min_token_size)更改为3或更低,并覆盖默认的停用词列表ft_stopword_file或innodb_ft_enable_stopword删除单词&#34;和&#34;以及您要索引的任何其他常用单词。
如果您想使用您的方法,您可以尝试这样的方法,但它会很慢,因为它是进行表扫描:
SELECT PUBLISHER_NAME
FROM PUBISHER
WHERE PUBLISHER_NAME LIKE '% and %'
OR PUBLISHER_NAME LIKE 'and %'
OR PUBLISHER_NAME LIKE '% and';