在 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.
我有以下字符串需要传递给 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.