MySQL查询返回包含文本列中搜索词的句子

时间:2015-11-15 16:49:16

标签: mysql

我需要一个MySQL查询来从包含指定搜索词的文本列返回一个完整的句子。

目前,我可以使用此查询获取搜索词之前和之后的20个字符:

select id, MID(body,(LOCATE('search_word', body)-20),40) from content where body like "%search_word%" limit 1

,但就我而言。

我希望得到一个包含我的搜索词的整个句子(在两个点之间)。

有什么想法吗?正则表达式?我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

为什么不用mysql获取整个字段并用实际的编程语言过滤掉句子。

javascript示例如下所示:https://jsfiddle.net/n0wfgjoc/

var text = "Lorem Ipsum is simply dummy text ... versions of Lorem Ipsum.";

var search = "popularised in the";
var pattern = new RegExp('\. ([^.]*' + search + '[^.]*\.)', 'i');

document.getElementsByTagName('body')[0].innerHTML = text.match(pattern)[1];

你不应该在适应我的需求和你的语言方面遇到问题。

它应该比在纯SQL中执行它更高效。

编辑:

正如@David指出的那样,如果在其他环境中的文本中使用了点,可能会出现问题 - 可能是缩写或日期。

解决这将是一项艰巨的任务。我的例子没有涉及该用例。

答案 1 :(得分:0)

在PostgreSQL中,您可以使用regexp_matches进行此操作,我相信在MySQL中,这将是REGEXP_SUBSTR,另请参见:https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr