如果我使用replace(email, ';', '')
,它将删除所有的';'从具有电子邮件列表的值。我的要求是,仅需要删除特殊电子邮件以及“;”如果是特定电子邮件的结尾还是开头。
EG:
abc@yahoo.com;efg@yahoo.com;hij@yahoo.com;ab1@yahoo.com
如果我想删除abc@yahoo.com;那么结果应该是
efg@yahoo.com;hij@yahoo.com;ab1@yahoo.com
或者如果我想删除hij@yahoo.com;那么结果应该是
abc@yahoo.com;efg@yahoo.com;ab1@yahoo.com
查询:
DECLARE
v_sql VARCHAR2(5000);
v_email VARCHAR2(5000):= 'abc@yahoo.com';
v_sql:=UPDATE L05460176.SI_Recipient set email = case when (:1||';') then replace (lower (replace (email, :1||';' )), chr(32),'')
when (';'||:1) then email = replace (lower (replace (email, ';'||:1 )),
chr(32),'') WHERE EVENT = 'XYZ'
EXECUTE IMMEDIATE v_sql
USING v_email ;
答案 0 :(得分:1)
一种方法使用trim()
和replace()
:
trim(both ';' from
replace(';' || emails || ';', ';' || 'hij@yahoo.com' || ';', ';')
)
也就是说,我建议使用其他数据模型。 Oracle提供了许多替代方案来存储事物列表-从传统的联结/关联表到JSON再到嵌套表。
答案 1 :(得分:1)
您可以尝试使用replace + replace:
select
replace(replace('efg@yahoo.com;hij@yahoo.com;ab1@yahoo.com', 'hij@yahoo.com', ''), ';;', ';')
from dual;
这里是DEMO