从数据库中查找特定关键字后的第1个和后20个字符?

时间:2012-04-06 13:54:08

标签: mysql

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

目前我正在使用此查询:

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

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

2 个答案:

答案 0 :(得分: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 surrounding a given search string within a string - 听起来你想要从描述中提取一些上下文,在字边界上执行此操作可能比在固定数量的字母上更有用。

答案 1 :(得分:1)

以下是一个想法:

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

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