MySQL:在Y字之前和之后返回X字

时间:2011-12-20 20:40:16

标签: mysql select

我已经尝试了几天了,并且根本无法让它完全正常工作,没有多少搜索帮助了我。

在我的数据库中,我的文章中包含链接,如下所示:

    one two three four five six seven eight nine ten eleven twelve thirteen fourteen
 <a href="google.com>Google!</a> one two three four five six seven eight nine ten

我希望能够做到的是找到文章中的链接并报告最多5个单词之后,最多5个单词之后(例如)

所以我的结果会是这样的:

ten eleven twelve thirteen fourteen
 <a href="google.com>Google!</a> one two three four five

任何人都可以帮我查询完成此操作吗?

2 个答案:

答案 0 :(得分:5)

SET @s = 'one two three four five six seven eight nine ten eleven twelve thirteen fourteen
 <a href="google.com>Google!</a> Albuquerque one two three four five six seven eight nine ten';
SELECT CONCAT(
    SUBSTRING_INDEX(LEFT(@s, INSTR(@s, '<a href="') -1), ' ', -6) -- 5 words before ' <a href="'
   , SUBSTRING(@s, INSTR(@s, '<a href="'), INSTR(@s, '</a>') - INSTR(@s, ' <a href="') + 3) -- the href
   , SUBSTRING_INDEX(SUBSTRING(@s, INSTR(@s, '</a>') + 4, 10000), ' ', 6) -- 5 words after '</a>'
   );

有关文档,请参阅http://dev.mysql.com/doc/refman/5.5/en/string-functions.html

这适用于字符串中的第一个链接。顺便说一下,我会在我的演示代码中使用它(在某些情况下是PHP),但是你在SQL中可以做的事情令人惊讶。请务必检查您的输入(WHERE引用LIKE'%&lt; a href =“%&lt; / a&gt;%'),因为没有链接的输入可能无法满足您的需求。

答案 1 :(得分:1)

默认情况下,您无法执行此操作。 Regexp只返回布尔值,但是如果使用外部正则表达式插件like this one,则可能是。