我在sql过程中收到一个电子邮件ID。我需要用定义的字符串替换电子邮件客户端。
假设我收到电子邮件ID,例如abc@gmail.com或pqr@yahoo.com或mnz@hotmail.com,在这种情况下,我需要用固定的字符串替换@ gmail.com / @ yahoo.com。 / p>
abc@gmail.com - abc@outlook.com
pqr@yahoo.com - pqr@outlook.com
mnz@hotmail.com - mnz@outlook.com
因此@后面的字符串将被我定义的字符串替换,而与过程中接收到的数据无关。
尝试了替换方法,但是没有用。我知道我需要使用charindex,substring和left函数来使其正常工作,但不能获得正确的组合。
答案 0 :(得分:2)
在这里我会保持简单,只需将CHARINDEX
与LEFT
一起使用:
UPDATE yourTable
SET email_id = LEFT(email_id, CHARINDEX('@', email_id) - 1) + 'outlook.com';
答案 1 :(得分:2)
您可以将REPLACE()
与CHARINDEX()
一起使用
CREATE TABLE Strings(
Str VARCHAR(45)
);
INSERT INTO Strings VALUES
('abc@gmail.com'),
('pqr@yahoo.com'),
('mnz@hotmail.com');
UPDATE Strings
SET Str = REPLACE(Str, SUBSTRING(Str, CHARINDEX('@',Str), LEN(Str)), '@outlook.com');
SELECT *
FROM Strings;
这也是另一种方式
UPDATE S
SET S.Str = REPLACE(S.Str, E.V, '@outlook.com')
FROM Strings S JOIN (VALUES('@gmail.com'), ('@hotmail.com'), ('@yahoo.com')) E(V)
ON S.Str LIKE CONCAT('%', E.V, '%');
答案 2 :(得分:0)
如果您使用的是SQL Server 2017,则可以将其用作主查询中的子查询:
SELECT FIRST_VALUE(value) OVER (ORDER BY (SELECT NULL)) + '@outlook.com'
FROM STRING_SPLIT('pqr@yahoo.com', '@');
详细了解FIRST_VALUE
:https://docs.microsoft.com/en-us/sql/t-sql/functions/first-value-transact-sql?view=sql-server-2017
详细了解STRING_SPLIT
:https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017
更新
正如@TimBiegeleisen所提到的,Microsoft文档说:
输出行可以按任何顺序排列。订单不保证 匹配输入字符串中子字符串的顺序
要克服这一点,我们甚至可以将查询重写为:
SELECT value + '@outlook.com'
FROM
(
SELECT value,
CHARINDEX('@', 'pqr@yahoo.com') AS atIndex,
CHARINDEX(value, 'pqr@yahoo.com') AS partIndex
FROM STRING_SPLIT('pqr@yahoo.com', '@')
) AS K
WHERE K.atIndex > K.partIndex;
答案 3 :(得分:-1)
您可以使用以下查询根据您的数据替换tbl_name和column_name:
UPDATE tbl_name SET column_name = replace(column_name, 'gmail.com', 'outlook.com');
UPDATE tbl_name SET column_name = replace(column_name, 'yahoo.com', 'outlook.com');
UPDATE tbl_name SET column_name = replace(column_name, 'hotmail.com', 'outlook.com');