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 生成函数来将逗号分隔值拆分为多行。
我在列中有一个字符串 '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 生成函数来将逗号分隔值拆分为多行。