2017-03-14 3 views
0

PostgreSQLのテーブルで正規表現の検索をしようとしています。しかし、私は単一のステートメントを使用してそうする正しい構文を見つけることができません。私は、インデックス列を作成する場合 が、私は知らない私は、いずれかが私を助けて.could正規表現かどうかに基づいて検索を行うことができるようになりますしてくださいPostgreSQLのテーブルの正規表現の検索

問合せは、ここでは、この

SELECT * 
FROM flight_info 
where to_tsvector('english',event_id || ' ' || type || ' ' || category || ' ' || number || ' '|| make || ' '|| model ) @@ to_tsquery('Incident'); 

のようなものです事件ですテキストに基づいて正確に一致しますが、私はLIKEを使ってどのように行うのかのような正規表現の検索ベースを作成する必要があります。

またはすべての列でlike節を使用するのは唯一の方法ですか?

か、正規表現と、フルテキスト検索を混在することはできませんクエリ

答えて

1

に多くの列に適用される句のように与えるための方法があります。それはto_tsquery()

以内に正規表現を使用することはできませんあなたは代わりにregexp_matches()を使用することができます:https://www.postgresql.org/docs/9.6/static/functions-matching.html

SELECT regexp_matches('foobarbequebaz', '(bar)(beque)'); 
regexp_matches 
---------------- 
{bar,beque} 
(1 row) 

SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); 
regexp_matches 
---------------- 
{bar,beque} 
{bazil,barf} 
(2 rows) 

詳細情報を更新:

WHE WHEREで正規表現を使用するには演算子を使用します。

-- Sample schema 
CREATE TABLE sample_table (
    id serial, 
    col1 text, 
    col2 text, 
    col3 text 
); 
INSERT INTO sample_table (col1, col2, col3) VALUES ('this', 'is', 'foobarbequebazilbarfbonk'); 
INSERT INTO sample_table (col1, col2, col3) VALUES ('apple foobarbequebazequeb', 'rocky', 'sunny'); 
INSERT INTO sample_table (col1, col2, col3) VALUES ('not', 'a', 'match'); 

-- Query 
SELECT * 
FROM sample_table 
WHERE (col1 || col2 || col3) ~ '(bar)(beque)'; 

- >

id |   col1   | col2 |   col3   
----+---------------------------+-------+-------------------------- 
    1 | this      | is | foobarbequebazilbarfbonk 
    2 | apple foobarbequebazequeb | rocky | sunny 
    (2 rows) 

あなたはそれを大文字と小文字を区別しません作るために代わり~*を使用することができます。 詳細情報:https://www.postgresql.org/docs/current/static/functions-matching.html

+1

この記事をどのようにして列に適用するか教えてください。私はそれを複数の列に適用したい –

+0

こんにちは@harshakumarReddy私は一度に複数の列でそれを使用する方法を示すために私の答えを更新 – Gab

+0

我々はwhere節で上記のregexp_matchesを使用することができます。私はそれを働かせることができません。 –