在 MySQL 中,如何在数据库中找到包含在我匹配的较长字符串中的结果?

In MySQL, how do I find a result in the database that is contained in a longer string I am matching against?

我有以下字符串需要传递给 MySQL DB:

TURNER SERIES TREA @treavturnerL @tvturner

我有以下行 return 用于查询 SELECT name FROM player:

Babe Ruth
Ken Griffey Jr.
Trea Turner
Hank Aaron 
Brandon Crawford

我如何创建某种查询(或存储过程)return Trea Turner,因为他的名字包含在原始字符串中?

一个答案是全文索引,您可以在其中使用 match——正如 Strawberry 在评论中建议的那样。

您也可以使用正则表达式来做到这一点。如果你想要 any 匹配,你可以使用正则表达式的技巧:只需将空格替换为 |:

where p.player regexp replace('TURNER SERIES TREA @treavturnerL @tvturner', ' ', '|')

如果你想匹配玩家名字中的所有个“单词”,你可以使用regexp_replace()替换每个单词。如果只剩下空格,则匹配:

where trim(regexp_replace(p.player, replace('TURNER SERIES TREA @treavturnerL @tvturner', ' ', '|'), '')) = ''

Here 是一个 db<>fiddle.