【问题标题】:redshift regexp_substr all occurrencesredshift regexp_substr 所有出现
【发布时间】:2021-06-17 12:42:00
【问题描述】:

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

示例查询

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

SELECT
*
FROM aa

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

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

regexp_substr(record, '(#{2})([A-Z]{2,3})',1,n)

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

【问题讨论】:

  • 你能提供样本数据和想要的结果吗?

标签: sql regex amazon-redshift regexp-substr


【解决方案1】:

如果我理解正确,您可以改用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) <> ''

【讨论】:

  • 感谢您的回答。我有一个包含这样的句子的字段:“我想##DG 拆分##AFI ##GFA 句子#AA”。我正在尝试隔离 ## 子字符串并返回如下字段:“##DG ##AFI ##GFA #AA”。不太确定您提出的解决方案是否识别正则表达式并将它们收集在一个字段中。在我看来,它只识别 ## 而没有识别正则表达式
猜你喜欢
  • 2021-01-30
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多