我正在尝试在PostgreSql中的表上进行正则表达式搜索。但我无法使用单个语句找到正确的语法。 我不知道我是否创建了索引列,我是否可以根据正则表达式进行搜索。可以任何人帮助我
查询就像这样
SELECT *
FROM flight_info
where to_tsvector('english',event_id || ' ' || type || ' ' || category || ' ' || number || ' '|| make || ' '|| model ) @@ to_tsquery('Incident');
此处事件完全基于文本匹配但是我需要在正则表达式上进行搜索,就像我们使用LIKE一样。
或者在所有列上使用like子句是唯一的方法吗?
或者有没有办法给出适用于查询
中许多列的like子句答案 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