MySQL - 查找围绕搜索关键字的单词

标签 mysql regex

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

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/

相关文章:

java - 在 Java 模式匹配方面需要帮助

javascript - RegExp - 如何匹配最短的金额?

php - 如何将图像保存在CodeIgniter根文件夹和数据库中?

regex - 如何为包含字母数字和特殊字符的输入编写匹配项

mysql - 无法从 MySQL 导入表

mysql - 将 MYSQL 列导出到没有标题的纯文本文件

javascript - 检测重复文本

java - 负前瞻正则表达式直到数字但没有连续的 0

MySQL - 为 Rails 应用程序设置默认时区

php - PDO (mysql) 参数号无效 : parameter was not defined