Postgresql 在postgres中使用ilike或like连接表时如何使用特殊字符?
我在postgres中有以下表格: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'忽略了有特殊字符的行。我想在加入时使用特殊字符的组合,比如“|”|-|/|(|)“我如何才能实现以下结
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您的示例数据需要包括您遇到的问题的示例。