2012-04-06 2 views
2

Я хочу найти первый и последний 20 символов после определенного ключевого слова из базы данных. Предположим, что ключевым словом является «Учетная запись», тогда я хочу найти первые 20 символов, прежде чем «Учетная запись» появится в строке и 20 символов после появления в строке «Учетная запись».Найдите 1-й и 20-й символы после определенного ключевого слова из базы данных?

В настоящее время я использую этот запрос:

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

, который будет отображать первые 20 символов в строке, в которой ключевое слово «Account» появится и последняя 20 символов в строке.

ответ

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

Следующая демонстрирует одну идею:

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

Это предполагает, однако, что есть по крайней мере 20 символов перед «счета». Вероятно, необходимо проверить, что в противном случае значение может быть отрицательным, что приводит к различным результатам (отрицательная позиция является смещением от конца строки).

+0

Thanks Mark Wilkins –

Смежные вопросы