2

假设我有一个随机文本,比如这个:

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 或某种子字符串?

4

1 回答 1

1

我玩过,我可以在纯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;
于 2013-10-02T16:25:04.770 回答