REGEXP_SUBSTR在Oracle中执行需要更多时间

时间:2013-08-27 12:31:16

标签: regex oracle split substr

我正在尝试将逗号分隔的电子邮件字符串拆分为以逗号分隔的单个电子邮件ID,但每个电子邮件ID都包含在单引号内。

我的输入 'one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com'

我的输出应为: 'one@gmail.com','two@gamil.com','three@gmail.com','four@gmail.com'

我将在oracle查询中使用上面的输出字符串,其条件如...

Where EmailId's in ( 'one@gmail.com','two@gamil.com','three@gmail.com','four@gmail.com');

我使用以下代码来实现此目的

 WHERE EMAIL IN 
                    (REGEXP_SUBSTR('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com' ,'[^,]+', 1, LEVEL))
CONNECT BY LEVEL <= LENGTH('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com' ) - LENGTH(REPLACE('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com' , ',', '')) +1;

但上面的查询需要60秒才能返回16条记录。任何人都可以建议我最好的方法......

1 个答案:

答案 0 :(得分:2)

试试这个,

WHERE email IN (
  select regexp_substr('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com','[^,]+', 1, level) from dual
  connect by regexp_substr('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com', '[^,]+', 1, level) is not null );