我想在数据库中找到特定关键字后的第一个和最后一个20个字符。 假设关键字是“帐户”,那么我想在“帐户”出现在一行之前找到前20个字符,在“帐户”出现在一行之后找到20个字符。
目前我正在使用此查询:
SELECT LEFT(Line1,20), RIGHT(Line,20) FROM minde_candidate_workexp
WHERE minde_candidate_workexp.WorkDesc LIKE '%Accounts%' ;
将显示关键字“帐户”出现的行的前20个字符,并显示该行的最后20个字符。
答案 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个字符。它可能需要检查,否则该值可能为负,这会产生不同的结果(负位置是从字符串末尾的偏移量)。