首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“雪花”中包含特定月份之后,从字段中提取所有文本

在“雪花”中包含特定月份之后,从字段中提取所有文本
EN

Stack Overflow用户
提问于 2022-09-27 16:03:34
回答 2查看 97关注 0票数 0

下面是我在“雪花”中的一个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 -收到的转让

EN

回答 2

Stack Overflow用户

发布于 2022-09-27 17:36:02

试试这个..。

代码语言:javascript
复制
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]+');
票数 0
EN

Stack Overflow用户

发布于 2022-09-29 18:10:26

如果我是您,并且我有更好的权限为下游报告组织数据,我将使用regex修改注释,以便将它们拆分为行,并在单独的列中解析日期和注释。一种方法是使用可靠的分隔符填充所有日期实例。我使用双管||,但您可以选择任何您认为不太可能出现在数据中的字符/s。

代码语言:javascript
复制
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,允许我们划分下一个注释的开头。当我们将笔记拆分成行时,这是很有用的。

如果每个注释必须有一行,则可以将上面的内容修改为如下所示。

代码语言:javascript
复制
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 str
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73870564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档