下面是我在“雪花”中的一个Note列的例子。它可以在一个便笺中包含多个条目,每个条目由一个日期分隔。我想要完成的是能够从注释中提取出一个特定月份/年的日期的所有文本。我一直在尝试使用REGEXP_SUBSTR(注意,'.8/../ 2022 (^/+)',1,1,'i'),它使我得到了部分的方式,但它并没有从2022年8月开始提取所有条目的实例。目前,当我在雪花中运行时,它正在提取8/10/2022条目,这很奇怪,因为它跳过了8/1/2022。
任何帮助都将不胜感激!
注:2020年6月17日-规定7/8/2020 -创建账户8/1/2022 -更新协议08/10/2022 -收到法院DOC 8/11/2022年- DEUBANKS -收到的转移
预期结果:8/1/2022年-更新协议08/10/2022 -收到法院DOC 8/11/2022年- DEUBANKS -收到的转让
发布于 2022-09-27 17:36:02
试试这个..。
select regexp_extract_all('06/17/2020 - PROVISIONED 7/8/2020 - CREATED ACCOUNT 8/1/2022 - UPDATED AGREEMENT 08/10/2022 – RECEIVED COURTHOUSE DOC 8/11/2022 - DEUBANKS – RECEIVED TRANSFER'
,'0?8\/[0-9]{1,2}\/[0-9]{4}[\\W]+[\\w]+[\\W]+[\\w]+');发布于 2022-09-29 18:10:26
如果我是您,并且我有更好的权限为下游报告组织数据,我将使用regex修改注释,以便将它们拆分为行,并在单独的列中解析日期和注释。一种方法是使用可靠的分隔符填充所有日期实例。我使用双管||,但您可以选择任何您认为不太可能出现在数据中的字符/s。
with cte(str) as
(select '06/17/2020 - PROVISIONED 7/8/2020 - CREATED ACCOUNT 8/1/2022 - UPDATED AGREEMENT 08/10/2022 – RECEIVED COURTHOUSE DOC 8/11/2022 - DEUBANKS – RECEIVED TRANSFER 06/17/2020 - PROVISIONED'),
note_splitted as
(select *,
try_to_date(regexp_substr(b.value,$$[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$$)) as note_date,
regexp_replace(b.value,$$[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}([^a-zA-Z0-9]*)$$) as note
from cte a, lateral split_to_table(regexp_replace(str,$$([0-9]{1,2}/[0-9]{1,2}/[0-9]{4})$$,'\|\|\\1'),'||') b
where b.value<>'')
select str, note, note_date
from note_splitted
where note_date>='2020-08-01';Note:在regexp_replace中,我们使用了一个替换技巧'\|\|\\1',它允许我们在替换\|\|之后包含捕获的组\\1。这样,month/day/year的所有实例都变成了||month/day/year,允许我们划分下一个注释的开头。当我们将笔记拆分成行时,这是很有用的。
如果每个注释必须有一行,则可以将上面的内容修改为如下所示。
with cte(str) as
(select '06/17/2020 - PROVISIONED 7/8/2020 - CREATED ACCOUNT 8/1/2022 - UPDATED AGREEMENT 08/10/2022 – RECEIVED COURTHOUSE DOC 8/11/2022 - DEUBANKS – RECEIVED TRANSFER 06/17/2020 - PROVISIONED')
select str,
listagg(b.value) as sub_note
from cte a, lateral split_to_table(regexp_replace(str,$$([0-9]{1,2}/[0-9]{1,2}/[0-9]{4})$$,'\|\|\\1'),'||') b
where b.value rlike $$0?8/[0-9]{1,2}/2022.*$$
group by strhttps://stackoverflow.com/questions/73870564
复制相似问题