【问题标题】:query to fetch the email addresses which are based on specific domain names查询以获取基于特定域名的电子邮件地址
【发布时间】:2020-10-16 06:33:12
【问题描述】:

我想从以下域名结尾的表格中获取电子邮件地址。

@yahoomail.com
@accelerator.com
@learning.com
@cloud.vintage.com

【问题讨论】:

  • where email like '%@yahoomail.com' or email like '%@accelerator.com' ...
  • 这能回答你的问题吗? SQL SELECT WHERE string ends with Column
  • 就像一个警告词:在大表上使用LIKE '%(somestring)' 进行“结束于”条件的搜索将非常低效且非常缓慢。不幸的是,由于带有前导% 的条件,没有索引可以帮助加快速度......

标签: sql-server


【解决方案1】:
SELECT EMAIL_COLUMN_NAME
FROM TABLE_NAME
WHERE EMAIL_COLUMN_NAME LIKE '%@yahoomail.com' OR 
      EMAIL_COLUMN_NAME LIKE '%@accelerator.com' OR 
      EMAIL_COLUMN_NAME LIKE '%@learning.com' OR
      EMAIL_COLUMN_NAME LIKE '%@cloud.vintage.com'

【讨论】:

  • 如果我想排除这些域,那么 NOT LIKE 将正常工作
【解决方案2】:

rileyeaton_s 的答案是正确的,但我想添加一个建议。如果您的计划是多次执行此搜索并希望提高性能,您可以添加一个仅包含域的持久计算列。

在下面的代码中,我添加了一个计算列,它提取域(包括@)并在该列上添加一个索引。

DECLARE @test TABLE (
    Email nvarchar(255),
    Domain AS SUBSTRING(Email, CHARINDEX('@', Email), 255) PERSISTED,
    INDEX IX_Domain (Domain))

INSERT INTO @test VALUES ('abc@123.com')

SELECT * FROM @test WHERE Domain = '@123.com'

这个查询会给出结果:

Email        Domain
abc@123.com  @123.com

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多