我需要一个MySQL查询来从包含指定搜索词的文本列返回一个完整的句子。
目前,我可以使用此查询获取搜索词之前和之后的20个字符:
select id, MID(body,(LOCATE('search_word', body)-20),40) from content where body like "%search_word%" limit 1
,但就我而言。
我希望得到一个包含我的搜索词的整个句子(在两个点之间)。
有什么想法吗?正则表达式?我该怎么做呢?
答案 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。