Postgresql 在postgres中使用ilike或like连接表时如何使用特殊字符?

Postgresql 在postgres中使用ilike或like连接表时如何使用特殊字符?,postgresql,join,sql-like,Postgresql,Join,Sql Like,我在postgres中有以下表格: TABLE1: col1 col2 NCT03009058 nivolumab (opdivo) NCT03009059 pembrolizumab (keytruda) NCT03009060 zumab NCT03009061 pembrolizumab-keytruda 我想在col2上加入上面的表,但是'like'和'ilike'忽略了有特殊字符的行。我想在加入时使用特殊字符的组合,比如“|”|-|/|(|)“我如何才能实现以下结

我在postgres中有以下表格:

TABLE1:

col1        col2
NCT03009058 nivolumab (opdivo)  
NCT03009059 pembrolizumab (keytruda)
NCT03009060 zumab
NCT03009061 pembrolizumab-keytruda
我想在col2上加入上面的表,但是'like'和'ilike'忽略了有特殊字符的行。我想在加入时使用特殊字符的组合,比如“|”|-|/|(|)“我如何才能实现以下结果

所需输出为:

col1        col2                          col3
NCT03009058 nivolumab (opdivo)        nivolumab 
NCT03009058 nivolumab (opdivo)        opdivo
NCT03009059 pembrolizumab (keytruda)  keytruda
NCT03009059 pembrolizumab (keytruda)  pembrolizumab 
NCT03009060 zumab                     zumab
NCT03009061 pembrolizumab-keytruda    keytruda
NCT03009061 pembrolizumab-keytruda    pembrolizumab

这里的任何建议都会非常有用。谢谢

我有一件事要说:

select * 
from table1 join table2
on to_tsvector(table1.col2) @@ to_tsquery(table2.col2);
    col1     |           col2           | col1 |     col2      
-------------+--------------------------+------+---------------
 NCT03009058 | nivolumab (opdivo)       |    1 | nivolumab
 NCT03009058 | nivolumab (opdivo)       |    2 | opdivo
 NCT03009059 | pembrolizumab (keytruda) |    3 | pembrolizumab
 NCT03009061 | pembrolizumab-keytruda   |    3 | pembrolizumab
 NCT03009060 | zumab                    |    3 | zumab
 NCT03009059 | pembrolizumab (keytruda) |    3 | keytruda
 NCT03009061 | pembrolizumab-keytruda   |    3 | keytruda
 NCT03009059 | pembrolizumab (keytruda) |    4 | pembrolizumab
 NCT03009061 | pembrolizumab-keytruda   |    4 | pembrolizumab
(9 rows)

我有一点很接近:

select * 
from table1 join table2
on to_tsvector(table1.col2) @@ to_tsquery(table2.col2);
    col1     |           col2           | col1 |     col2      
-------------+--------------------------+------+---------------
 NCT03009058 | nivolumab (opdivo)       |    1 | nivolumab
 NCT03009058 | nivolumab (opdivo)       |    2 | opdivo
 NCT03009059 | pembrolizumab (keytruda) |    3 | pembrolizumab
 NCT03009061 | pembrolizumab-keytruda   |    3 | pembrolizumab
 NCT03009060 | zumab                    |    3 | zumab
 NCT03009059 | pembrolizumab (keytruda) |    3 | keytruda
 NCT03009061 | pembrolizumab-keytruda   |    3 | keytruda
 NCT03009059 | pembrolizumab (keytruda) |    4 | pembrolizumab
 NCT03009061 | pembrolizumab-keytruda   |    4 | pembrolizumab
(9 rows)

所以我找到了解决这个问题的办法。。我没有使用to_tsquery,而是使用了PlaintoTo_tsquery,效果很好

所以我找到了解决这个问题的办法。。我没有使用to_tsquery,而是使用了PlaintoTo_tsquery,效果很好

看起来不错,但它没有使用“%”之类的其他字符。。表中有更多带有其他特殊字符的行。我可以在此查询中添加其他字符吗?这是使用全文搜索来执行一些通常忽略特殊字符的模式匹配。我不确定您是否可以在LIKE中使用%as,但您可以使用类似于
ts_tsquery(前缀:“')
的方法进行前缀模式匹配:看到查询看起来很完美,但我仍然得到错误:错误:tsquery中的语法错误:“0.4%盐酸利多卡因和5%葡萄糖注射液”我无法重现,请在表1和表2中发布相应的数据。@rshar您的示例数据需要包含您遇到的问题的示例。该示例看起来不错,但没有使用“%”等其他字符。。表中有更多带有其他特殊字符的行。我可以在此查询中添加其他字符吗?这是使用全文搜索来执行一些通常忽略特殊字符的模式匹配。我不确定您是否可以在LIKE中使用%as,但您可以使用类似于
ts_tsquery(前缀:“')
的方法进行前缀模式匹配:看到查询看起来很完美,但我仍然得到错误:错误:tsquery中的语法错误:“0.4%盐酸利多卡因和5%葡萄糖注射液”我无法复制,请在表1和表2中发布相应的数据。@rshar您的示例数据需要包括您遇到的问题的示例。