2

我想从数据库中找到特定关键字之后的第一个和最后 20 个字符。假设关键字是“帐户”,那么我想在一行中出现“帐户”之前的前 20 个字符和在一行中出现“帐户”之后的 20 个字符。

目前我正在使用这个查询:

SELECT LEFT(Line1,20), RIGHT(Line,20) FROM minde_candidate_workexp
    WHERE minde_candidate_workexp.WorkDesc LIKE '%Accounts%' ;

这将显示关键字“帐户”出现的行的前 20 个字符和该行的最后 20 个字符。

4

2 回答 2

2

LOCATE()和的组合SUBSTRING()应该可以解决问题。

像这样的东西(未经测试):

SELECT 
  SUBSTRING(m.WorkDesc, 
            GREATEST(LOCATE('Accounts', m.WorkDesc) - 20, 0), -- Force pos >= 0
            LENGTH('Accounts') + 20) 
FROM minde_candidate_workexp m 
WHERE 
  m.WorkDesc LIKE '%Accounts%' 
:

另请参阅这个类似的问题:Extract X number of words around a given search string within a string - 听起来您想从描述中提取一些上下文,在单词边界上这样做可能比在固定数字上更有用的字母。

于 2012-04-06T14:02:04.120 回答
1

下面演示了一个想法:

SELECT substring(line1, locate('account',line1) - 20, 20), 
       substring(line1, locate('account',line1) + length('account'), 20) 
   FROM ...

但是,它假定“帐户”前面至少有 20 个字符。它可能需要检查,否则该值可能为负数,这会产生不同的结果(负数位置是从字符串末尾的偏移量)。

于 2012-04-06T14:05:26.767 回答