假设我有一个随机文本,比如这个:
Lorem ipsum dolor sit amet consectetur adipiscing elit.
我想使用 MySQL 搜索给定的关键字并获得返回值以及围绕我的关键字的直接词。
示例:
Select * from table where keyword like "%amet%"
这将返回整个文本。但我需要一个只返回以下文本的查询:
sit amet consectetur
所以,我搜索的词,加上上一个词和下一个词。
--
此外,如果我搜索关键字 elit,返回应该是(因为“elit”之后没有单词):
adipiscing elit
如果我搜索关键字 Lorem,返回应该是(因为“Lorem”之前没有单词):
Lorem ipsum
这能以某种方式完成吗? 使用正则表达式或空格检测,使用 MID 或某种子字符串?
最佳答案
我玩过,我可以在纯mysql中给你一半的解决方案。
你可以在使用这个之后得到你所在单词两边的字符串。只是不知道如何获取单词而不是整个子字符串。希望对您有所帮助。
select case when (select w.t regexp concat('[[:<:]]', w.v)) = 1
then substr(w.t, 1, locate(w.v, w.t)-1) else null end as 'left_word',
w.v as word,
case when (select w.t regexp concat(w.v, '[[:>:]]')) = 1
then substr(w.t, locate(w.v, w.t)+length(w.v)) else null end as 'right_word'
from (
select "Lorem ipsum dolor sit amet consectetur adipiscing elit." as t, "amet" as v
) as w;
select case when (select w.t regexp concat('[[:<:]]', w.v)) = 1
then substr(w.t, 1, locate(w.v, w.t)-1) else null end as 'left_word',
w.v as word,
case when (select w.t regexp concat(w.v, '[[:>:]]')) = 1
then substr(w.t, locate(w.v, w.t)+length(w.v)) else null end as 'right_word'
from (
select "Lorem ipsum dolor sit amet consectetur adipiscing elit." as t, "elit." as v
) as w;
关于MySQL - 查找围绕搜索关键字的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140804/