Postgres连接正则表达式和表列

时间:2017-02-16 02:45:20

标签: sql regex postgresql concatenation

我想运行查询

SELECT * FROM table_a JOIN table_b ON table_a.title LIKE ('^[a-b]' || table_b.title)

如果table_a.title =" foo bar"和table_b.title有一行名为" oo",查询将不会返回任何结果,但是如果table_b.title有一行名为" foo",它将返回结果。

基本上我想匹配table_b上的标题,只要它是一个完整的单词(由空格包围,或在字符串的开头和结尾处),而不是如果另一个单词中有table_b.title的一部分则不匹配。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果您想在Postgres中使用正则表达式,请使用~similar toregexp_matches,而不是like

SELECT *
FROM table_a JOIN
     table_b
     ON table_a.title ~ ('^[a-b]' || table_b.title);

答案 1 :(得分:0)

最终为我工作的是:

SELECT 1 FROM table_a JOIN table_b 
ON (' ' || table_b.title || ' ') ~* ('.*?[^a-zA-Z0-9]+' || table_b.name || '[^a-zA-Z0-9].*?') 
where table_b.id IS NOT NULL