Redshift 从字符串中获取单词模式

Redshift get Word patterns from a String

我在列中有一个字符串 'ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4' 我需要单独提取以 ABC 开头的单词。预期结果应该是

ABC1,ABC2,ABC3,ABC4

我试过风箱但没用

select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',1),'ABC[^"]*')

我只有第一次出现:作为 ABC1。 如何获得所有出现的 ABC*

由于您使用的函数 (split_part,regexp_substr) returns 是匹配项的第 n 个元素,因此您只得到一个匹配项。

解决此问题的 most 朴素方法:

select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',1),'ABC[^"]*')
union all
select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',2),'ABC[^"]*')
union all
...
select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',20),'ABC[^"]*')

要改进这一点,您需要先将逗号分隔值转换为多行,然后使用正则表达式。这可以通过多种方式完成,有关详细信息,请参阅 this post

结果: ABC1 ABC2

这里棘手的部分是缺少 os 一个 table 生成函数来将逗号分隔值拆分为多行。