gpt4 book ai didi

SQL 批量字符串操作

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:39 25 4
gpt4 key购买 nike

我正在使用 Oracle 数据库,需要在其中操作一个字符串列。该列包含以下格式的多个电子邮件地址:

jgooooll@gmail.com;dhookep@gmail.com;amoore@outlook.com

我想做的是删除所有结尾有“@gmail.com”的内容(在此示例中,amoore@outlook.com 将被删除)但是 amoore@outlook。 com 可能是该列下一行中的第一封电子邮件,因此这种方式没有真正固定的格式,唯一的格式是每个地址由分号分隔。

是否可以通过一个命令来执行此操作以遍历列中的每一行并删除所有不是@gmail.com 的内容?我不太确定这种处理在 SQL 中是否可行。只是在寻找你的想法!!

非常感谢你们。期待您的来信!

最佳答案

仅适用于 Oracle 11g (11.2) 以上版本。因为 listagg 函数只在 11.2 以后才支持。如果您使用的是 10.1 至 11.1,您可以编写自己的字符串聚合函数或采用 this一。

with T1 as (
select 1 id, 'jhd@jk.com;jgooooll@gmail.com;dhookep@gmail.com;amoore@outlook.com' emails from dual union all
select 2 id, 'jhd@jk.com;jgooooll@gmail.com;dhookep@gmail.com;amoore@outlook.com' emails from dual
)

select id
, listagg(email, ';') within group(order by id) emails
from (select id
, regexp_substr(emails,'[^;]+', 1, rn) email
from t1
cross join (select rownum rn
from(select max (regexp_count(emails, '[^;]+')) ml
from t1
)
connect by level <= ml
)
)
where email like '%@gmail.com%'
group by id

Id Emails
--------------------------------------
1 dhookep@gmail.com;jgooooll@gmail.com
2 dhookep@gmail.com;jgooooll@gmail.com

这是一个Demo

关于SQL 批量字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12392111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com