Есть ли самый простой способ выбрать только доменное имя из адреса электронной почты в Oracle? - PullRequest
2 голосов
/ 11 марта 2019

У меня есть таблица с именем email_id и именем столбца как email_id , и у меня есть эти идентификаторы электронной почты в столбце

name@yahoo.com
name@msn.com
name@gmail.com
name@xmsoftware.com 

И мне нужны только доменные именанапример, результат

yahoo
msn
gmail
xmsoftware 

Есть ли самый простой способ (или) любая другая функция, кроме этой?

select substr(email_id.email_id,(instr(email_id.email_id,'@',1)+1),(instr(email_id.email_id,'.',1) - (instr(email_id.email_id,'@',1)+1))) as domain 
from email_id;

Ответы [ 2 ]

4 голосов
/ 11 марта 2019

Я бы предпочел REGEXP_SUBSTR

select REGEXP_SUBSTR(email_id,'^.*@(.*)\.(.*)$',1,1,null,1) as domain 
 FROM emails;--                     ^ first match        ^ within()

Демо

1 голос
/ 11 марта 2019

старомодный способ заключается в использовании SUBSTR + INSTR комбинации.Для ввода требуется больше букв (по сравнению с регулярными выражениями), но он может работать быстрее на больших наборах данных.

SQL> WITH email_id (email_id)
  2       AS (SELECT 'name@yahoo.com' FROM DUAL
  3           UNION ALL
  4           SELECT 'name@msn.com' FROM DUAL
  5           UNION ALL
  6           SELECT 'name@gmail.com' FROM DUAL
  7           UNION ALL
  8           SELECT 'name@xmsoftware.com ' FROM DUAL)
  9  select email_id,
 10         substr(email_id,
 11                instr(email_id, '@') + 1,
 12                instr(email_id, '.', instr(email_id, '@')) - instr(email_id, '@') - 1) result
 13  from email_id;

EMAIL_ID             RESULT
-------------------- --------------------
name@yahoo.com       yahoo
name@msn.com         msn
name@gmail.com       gmail
name@xmsoftware.com  xmsoftware

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