没有' .com&#39 ;?如何获取域名?

时间:2017-09-18 04:57:22

标签: sql oracle10g substring

SELECT substr(Emails, instr(Emails, '@')+1)
      FROM EmployeeEmails;

返回

gmail.com

我需要连接才能获得:

gmail

4 个答案:

答案 0 :(得分:2)

检查您的相关数据库查询:

查询(针对MySQL)

select (SUBSTRING_INDEX(SUBSTR(Emails, INSTR(Emails, '@') + 1),'.',1)) from EmployeeEmails;

查询(适用于Sql Server):

select SUBSTRING(Emails,(CHARINDEX('@',Emails)+1),1) from EmployeeEmails;

查询(适用于Oracle)

    select substr(Emails,instr(Emails,'@',1)+1) as domain
from EmployeeEmails;

答案 1 :(得分:1)

您可以使用REGEXP_REPLACE提取域名:

select regexp_replace(emails, '^[^@]+@([^.]+)\..+$', '\1') from employeeemails;

适用于模式abcd@efgh.ijkl的任何电子邮件。

模式:

  • ^开始刺痛
  • [^@]+除了@
  • 之外的1到n个字符
  • @ at符号@
  • (请记住以下字符串
  • [^.]+除了点之外的1到n个字符。
  • )要记住的字符串的结尾
  • \.一个点。
  • .+ 1到n个字符
  • $字符串结尾
  • \1记住的字符串

这是没有REGEXP_REPLACE的老式方式:

select substr(emails,
              instr(emails, '@') + 1, 
              instr(emails, '.', instr(emails, '@') + 1) - instr(emails, '@') - 1
             )
from employeeemails;

答案 2 :(得分:0)

您可以将LIKE与外卡[{3}}

一起使用
  • 任何单个字符的下划线字符(_)。
  • 百分号字符(%)表示零个或多个字符的字符串。

    SELECT email FROM emails WHERE email NOT LIKE '%_@__%.__%'

这将忽略以下情况(有效电子邮件的简单版本):

  • 在@
  • 之前至少有一个字符的电子邮件
  • @和。
  • 之间至少有两个字符的电子邮件
  • 两者之间至少有两个字符的电子邮件。结束。

答案 3 :(得分:0)

试试这个: -

declare @email sysname = 'testCode@gmail.com'
SELECT substring(@email, charindex('@',@email,0)+1 , (charindex('.',@email,0)-1 - charindex('@',@email,0)))