在PostgreSql中的表中正则表达式搜索

时间:2017-03-14 11:57:36

标签: postgresql

我正在尝试在PostgreSql中的表上进行正则表达式搜索。但我无法使用单个语句找到正确的语法。 我不知道我是否创建了索引列,我是否可以根据正则表达式进行搜索。可以任何人帮助我

查询就像这样

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

此处事件完全基于文本匹配但是我需要在正则表达式上进行搜索,就像我们使用LIKE一样。

或者在所有列上使用like子句是唯一的方法吗?

或者有没有办法给出适用于查询

中许多列的like子句

1 个答案:

答案 0 :(得分:1)

您将无法混合正则表达式和全文搜索。在to_tsquery()

中无法使用正则表达式

您可以改为使用regexp_matches()

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)

https://www.postgresql.org/docs/9.6/static/functions-matching.html

的更多信息

<强>更新

要在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)';

- &GT;

 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