如何在where子句中使用regexp来过滤postgres中的行?

rqdpfwrv  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(348)

我在postgres11.0中有下表

col1            col2    col3                               col4
NCT00001723 4894402     xenical (orlistat)capsules         xenical
NCT00001724 4894403     xenical (orlistat)capsules         orlistat
NCT00001725 4894404     capsules                           capsules 
NCT00001726 4894405     insulin                            ins

我想过滤上面的行,这样col3=col4或col3的确切内容应该包含在col4中。
所需输出为:

col1            col2    col3                               col4
NCT00001723 4894402     xenical (orlistat)capsules         xenical
NCT00001724 4894403     xenical (orlistat)capsules         orlistat
NCT00001725 4894404     capsules                           capsules

我正在下面的查询中尝试获取此输出。

SELECT
    *
FROM
    table 
where col3 = col4 or                         --exact match
regexp_matches(col3, '(.*).*\(') = col4 or   --match content before brackets
regexp_matches(col3, '.*\(.*\).*') = col4 --match content in brackets

这里的任何建议都会很有帮助。谢谢

r8uurelv

r8uurelv1#

如果我没听错的话,你可以用转义这个词 \y : \y :只在单词的开头或结尾匹配
在您的查询中:

select * from mytable where col3 ~  ('\y' || col4 || '\y')

db小提琴演示:

col1        |    col2 | col3                       | col4    
:---------- | ------: | :------------------------- | :-------
NCT00001723 | 4894402 | xenical (orlistat)capsules | xenical 
NCT00001724 | 4894403 | xenical (orlistat)capsules | orlistat
NCT00001725 | 4894404 | capsules                   | capsules

相关问题