В MySQL, как мне найти результат в базе данных, который содержится в более длинной строке, с которой я сопоставляю?

#mysql #sql #match

#mysql #sql #совпадение

Вопрос:

У меня есть следующая строка, которую мне нужно передать в базу данных MySQL:

 TURNER SERIES TREA @treavturnerL @tvturner
 

У меня есть следующие строки, возвращенные для запроса SELECT name FROM player :

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

Как я могу создать какой-либо запрос (или хранимую процедуру), который будет возвращать Trea Turner , поскольку его имя содержится в исходной строке?

Комментарии:

1. Видишь db-fiddle.com/f/kz9E7EvqXZBQ81uzM92tDN/0

Ответ №1:

Один из ответов — это полнотекстовый индекс, где вы можете использовать match — как предлагает Strawberry в комментарии.

Вы также можете сделать это с помощью регулярных выражений. Если вам нужно какое-либо совпадение, вы можете использовать трюк с регулярными выражениями: просто замените пробелы на | :

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

Если вы хотите, чтобы все «слова» в имени игрока совпадали, вы можете заменить каждое слово с помощью regexp_replace() . Если не осталось ничего, кроме пробелов, у вас есть совпадение:

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

Вот скрипка db<>.