2

データベースから特定のキーワードの後の最初と最後の 20 文字を検索したい。キーワードが「アカウント」であるとすると、「アカウント」が行に表示される前の最初の 20 文字と、「アカウント」が行に表示される後の 20 文字を検索したいとします。

現在、私はこのクエリを使用しています:

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

これは、キーワード「Account」が表示される行の最初の 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%' 
:

この同様の質問も参照してください:文字列内の特定の検索文字列を囲む X 個の単語を抽出する- 説明から何らかのコンテキストを引き出したいように思えます。固定数よりも単語の境界でそれを行う方が便利な場合があります。文字の。

于 2012-04-06T14:02:04.120 に答える
1

以下は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 に答える