[英]Return all substring values from a string column when contains a small list of substring
我有一张处方表,同一列中可能包含多种药物。 我希望仅在存在某些药物(3 种药物的列表)时返回查询,只有一种或任何一种或全部存在。 例如,当有 Medicine A、Medicine B 和 Medicine C 时查找。该字段可能还包含有关该药物的一些注释。
输入:
*column A*
Medicine A
Medicine B and Medicine D
2 x day Medicine A and 1 shot of Medicine C
Medicine E and Medicine D
Medicine D , Medicine A and Medicine B
Medicine E , Medicine C and Medicine A
预计 Output:
*column A*
Medicine A
Medicine B
Medicine A Medicine C
Medicine A Medicine B
Medicine C Medicine A
我正在使用 Postgres 13.7。 任何建议表示赞赏! 谢谢
我试着用 case when 工作。 但是,如果我需要在列表中包含另一种药物,将会扩展很多。
您可以使用regexp_matches
function 获取所有必需的匹配项,然后使用string_agg
function 将结果匹配项分组到一行中。
select columnA, string_agg(translate(m::text, '{}"',''), ' ') matches
from
(
select columnA ,
regexp_matches(columnA, 'Medicine [ABC]', 'g') m
from table_name
) T
group by columnA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.