redshift regexp_substr 所有出现

问题描述

我正在尝试返回与 Redshift 数据库中的特定正则表达式匹配的所有结果。

示例查询

WITH aa AS
(SELECT disTINCT
id,record,regexp_substr(record,'(#{2})([A-Z]{2,3})',1,1),REGEXP_COUNT(record,3})')
FROM table_a)

SELECT
*
FROM aa

上面的查询返回第一次出现和出现的总次数

有没有办法返回所有出现的情况?也许使用受计数限制的变量进行迭代?

regexp_substr(record,n)

Oracle 有一个 CONNECT BY LEVEL 的解决方案,但该选项似乎不适用于 Redshift。

解决方法

如果我理解正确,您可以使用 split_part() 代替:

split_part(record,'##',<n>)

然后你可以尝试生成数字并得到结果:

with n as (
      select row_number() over () as n
      from t
      limit 10
     )
select t.*,split_part(record,n.n) 
from t join
     n
     on split_part(record,n.n) <> ''

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...