已知有一表 mail栏位有 smid,userid,sysid,mailadd
其中smid为主键
例如表中有以下数据
smid   userid       sysid     mailadd
1      123           343          [email protected],[email protected]
2      345           674          [email protected],[email protected]
3      453           787          [email protected][email protected]
4      2333         6756          [email protected],[email protected]
5      4545         6767          [email protected]
6      4521         8965          [email protected]其中 mailadd 中的资料不固定,可以添加
现要求得到 mailadd中所有 邮箱地址(不能重复)
请问该如何实现

解决方案 »

  1.   

    解析字符串,参考我的BLOGhttp://blog.csdn.net/java3344520/archive/2010/07/13/5731758.aspx
      

  2.   

    --数据量大,可能较慢
    SELECT DISTINCT regexp_substr(mailadd, '[^,]+', 1, LEVEL)
      FROM mail
    CONNECT BY LEVEL <= length(mailadd) - length(REPLACE(mailadd, ',')) + 1;
      

  3.   

    regexp_substr是自己写的函数吗??
      

  4.   


    报错,ora-00904: "REGEXP_SUBSTR":invalid identifier
      

  5.   

    我的oracle好像不支持 regexp_substr啊!
      

  6.   

    SELECT distinct substr(t.ca,
                           instr(t.ca, ',', 1, c.rn) + 1,
                           instr(t.ca, ',', 1, c.rn + 1) -
                           (instr(t.ca, ',', 1, c.rn) + 1)) AS MAILADD
      FROM (SELECT ',' || MAILADD || ',' AS ca,
                   length(MAILADD || ',') -
                   nvl(length(REPLACE(MAILADD, ',')), 0) AS cnt
              FROM DGEIP.EIP_SYS_MAIL
            ) t,
           (SELECT rownum rn FROM all_objects WHERE rownum <= 10) c
     WHERE c.rn <= t.cnt
      

  7.   

    -- 请参考:http://topic.csdn.net/u/20110921/16/8166d0a5-44b7-451d-97eb-983cfacb2995.html-- 17、18 楼的回复!