SQL 重新格式化电子邮件地址
SQL to re-format email address
我想将 SQL Select 语句放在一起,将格式 smith_john@test.com
的电子邮件地址重新格式化为 john.smith@test.com
。显然名字和姓氏中的字符数将发生变化,但下划线字符 (_) 将标识我要更新的地址。
完成此任务的最佳方法是什么?电子邮件地址字段 (EMAIL_ADD
) 当前包含整个电子邮件地址字符串。
我已将它分解成各个部分,这样更容易看清。
declare @email varchar(100) = 'smith_john@test.com'
SELECT SUBSTRING(@email, CHARINDEX('_',@email )+1, CHARINDEX('@',@email )-CHARINDEX('_', @email)-1) --first name
+ '.'
+ LEFT(@email,CHARINDEX('_',@email )-1) -- last name
+ RIGHT(@email, LEN(@email)- CHARINDEX('@', @email)+1) --domain
基于@WamLeslie 的回答
CROSS APPLY
在这里有很大帮助,因为您可以多次使用相同的表达式
SELECT
SUBSTRING(
email,
v1.underscore + 1,
v2.atsign - v1.underscore - 1
) --first name
+ '.'
+ LEFT(email, v1.underscore - 1) -- last name
+ RIGHT(email, LEN(email) - v2.atsign + 1) --domain
FROM table
CROSS APPLY (VALUES( NULLIF(CHARINDEX('_', email), 0) )) AS v1(underscore)
CROSS APPLY (VALUES( NULLIF(CHARINDEX('@', email, v1.underscore), 0) )) AS v2(atsign)
我想将 SQL Select 语句放在一起,将格式 smith_john@test.com
的电子邮件地址重新格式化为 john.smith@test.com
。显然名字和姓氏中的字符数将发生变化,但下划线字符 (_) 将标识我要更新的地址。
完成此任务的最佳方法是什么?电子邮件地址字段 (EMAIL_ADD
) 当前包含整个电子邮件地址字符串。
我已将它分解成各个部分,这样更容易看清。
declare @email varchar(100) = 'smith_john@test.com'
SELECT SUBSTRING(@email, CHARINDEX('_',@email )+1, CHARINDEX('@',@email )-CHARINDEX('_', @email)-1) --first name
+ '.'
+ LEFT(@email,CHARINDEX('_',@email )-1) -- last name
+ RIGHT(@email, LEN(@email)- CHARINDEX('@', @email)+1) --domain
基于@WamLeslie 的回答
CROSS APPLY
在这里有很大帮助,因为您可以多次使用相同的表达式
SELECT
SUBSTRING(
email,
v1.underscore + 1,
v2.atsign - v1.underscore - 1
) --first name
+ '.'
+ LEFT(email, v1.underscore - 1) -- last name
+ RIGHT(email, LEN(email) - v2.atsign + 1) --domain
FROM table
CROSS APPLY (VALUES( NULLIF(CHARINDEX('_', email), 0) )) AS v1(underscore)
CROSS APPLY (VALUES( NULLIF(CHARINDEX('@', email, v1.underscore), 0) )) AS v2(atsign)