【问题标题】:Replacing the domain part of email address in sql在sql中替换电子邮件地址的域部分
【发布时间】:2015-10-17 16:10:27
【问题描述】:

我有一个包含电子邮件地址的用户表。

在开发过程中,我们不希望将电子邮件发送给这些用户,同时我们希望使用这些数据。

我想替换电子邮件地址的所有域部分,例如:

john.smith@microsoft.com

与

john.smith@local.com

我想在表上运行更新语句来执行此操作。

我以前用过 REPLACE,但我猜需要一个正则表达式?

【问题讨论】:

  • 为什么不在开发中关闭电子邮件功能?一般来说,发送电子邮件的系统的开发环境最好有一个用于开发/调试目的的假 SMTP 侦听器。开发环境根本不应该指向生产电子邮件服务器。
  • Sql server 不支持正则表达式,但是你可以用 PATINDEX() 和 SUBSTRING() 做你需要的。
  • 如果替换域信息,数据将毫无用处。您可以通过使用@ 来使地址完全无效。
  • @David 我正在测试电子邮件,我会将其替换为电子邮件将发送到可以“捕获所有”电子邮件的 QA 服务器的其他东西。

标签: sql sql-server


【解决方案1】:

使用CHARINDEX 获取@ 的索引,LEFT 获取电子邮件的一部分并连接local.com。

CREATE TABLE #tab(email NVARCHAR(100));

INSERT INTO #tab
VALUES ('john.smith@microsoft.com');

UPDATE #tab
SET email = CONCAT(LEFT(email, CHARINDEX('@', email)), 'local.com');

SELECT *
FROM #tab

LiveDemo

如果您使用低于 2012 的版本,则需要与 + 连接:

UPDATE #tab
SET email = LEFT(email, CHARINDEX('@', email)) + 'local.com';

【讨论】:

  • 请注意,CONCAT() 从 SQL Server 2012 开始可用。
【解决方案2】:

正则表达式解决方案

CREATE TABLE tab(email text);

INSERT INTO tab
VALUES ('john.smith@microsoft.com');

UPDATE tab set email = regexp_replace(email, '(\S+)@\S+', '\1@local.com');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-13
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2021-10-17
    • 2014-09-18
    相关资源
    最近更新 更多