Вы можете попробовать что-то вроде следующего. Я предполагаю, что у вас есть столбец первичного ключа или столбцы в таблице, которые также имеют столбец электронной почты:
SELECT id, TRIM('@' FROM REGEXP_SUBSTR(email, '@\S+', 1, LEVEL))
FROM mytable
CONNECT BY REGEXP_SUBSTR(email, '@\S+', 1, LEVEL) IS NOT NULL
-- If you have a composite key, mention all of the columns here:
AND PRIOR id = id
AND PRIOR SYS_GUID() IS NOT NULL;
См. SQL Fiddle здесь (игнорируйте схему!).
Теперь вышеприведенный запрос получит все результаты, включая дубликаты, поэтому, если значение в столбце email
выглядит следующим образом: you@yahoo.com you@gmail.com you@gmail.com
, тогда gmail.com
будет возвращено дважды для этого значения первичного ключа. Просто замените SELECT
на SELECT DISTINCT
, чтобы обойти эту проблему (если вы хотите обойти ее).