質問

私は建物の基本的な検索機能を使用(さんをお待ちることができていない時にやったばMySQLでは、検索キーワード(例:るフィールド'%word%')を返し20単語のいずれかのキーワードでも見ることができますか?

役に立ちましたか?

解決

行うことができるのですべてのクエリを使用SUBSTRING_INDEX

CONCAT_WS(
' ',
-- 20 words before
TRIM(
    SUBSTRING_INDEX(
        SUBSTRING(field, 1, INSTR(field, 'word') - 1 ),
        ' ',
        -20
    )
),
-- your word
'word',
-- 20 words after
TRIM(
    SUBSTRING_INDEX(
        SUBSTRING(field, INSTR(field, 'word') + LENGTH('word') ),
        ' ',
        20
    )
)

)

他のヒント

利用のINSTR()関数の位置に、文字列、およびその利用部分文字列()関数を選択部分の文字の前後位置にします。

んでいる部分文字列の指示な負の値またはだかる。

してみると、報告することを要請する。

してほしいという企業からに限定することで言葉の数を返しを制限文字数を返すように

SELECT SUBSTRING(field_name, LOCATE('keyword', field_name) - chars_before, total_chars) FROM table_name WHERE field_name LIKE "%keyword%"
  • chars_before-の数 字を選択する前に キーワード(s)
  • total_charsに 数字をご希望の 選択

すなわち以下の例に戻30字のデータを見つめから15字以前のキーワード

SUBSTRING(field_name, LOCATE('keyword', field_name) - 15, 30)

注意:としてaryeh指摘の通り、負の値部分文字列()ちびっ子り-たとえば、キーワード内の[chars_before]charsの分野で、最後の[chars_before]chars野において、データが返されます。

行きたいというニーズがベストベットで検索結果を取得するために通SQLクエリーや、正規表現programaticallyすることなく、取得するグループの単語の前後に検索されます。

できないとしていたことが分かり、その正規表現できるようなもの:

.*(\w+)\s*WORD\s*(\w+).*

に置き換える WORD の検索ワードを使正規表現グループ1として前言葉は、2つの後の言葉

まで時以降でお願いっ RegexBuddy 場合で仕事をしたものですので、ここに

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top