Oracle SQL регулярное выражение для разделения строки по шаблону - PullRequest
0 голосов
/ 27 апреля 2018
| email                           |
+---------------------------------+
| abcd@gmail.com                  |
| bdef@gmail.com abdfgr@yahoo.com |
+---------------------------------+

Я попробовал ниже и это работает для 1-го ряда

substr(email,instr(email,'@',1,1))

Но для 2-го ряда в одной ячейке у нас есть 2 идентификатора домена. Теперь, как получить вывод, как показано ниже

gmail.com
gmail.com
yahoo.com

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Вы можете использовать REGEXP_SUBSTR, например:

SELECT REGEXP_SUBSTR ('jlora@outlook.com', '(\@).*') from DUAL

Результат: @ outlook.com

0 голосов
/ 29 апреля 2018

Вы можете попробовать что-то вроде следующего. Я предполагаю, что у вас есть столбец первичного ключа или столбцы в таблице, которые также имеют столбец электронной почты:

 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, чтобы обойти эту проблему (если вы хотите обойти ее).

0 голосов
/ 27 апреля 2018

Например:

SQL> with test (email) as
  2    (select 'abcd@gmail.com' from dual union
  3     select 'bdef@gmail.com abdfgr@yahoo.com' from dual
  4    )
  5  select ltrim(regexp_substr(email, '@(\w+\.\w+)', 1, column_value), '@') res
  6  from test,
  7       table(cast(multiset(select level from dual
  8                           connect by level <= regexp_count(email, '@' )
  9                          ) as sys.odcinumberlist));

RES
-----------------------------------------------------------------------------------

gmail.com
gmail.com
yahoo.com

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...