我试图通过全名生成电子邮件。以下是我所拥有的,而且我被困在这里
select distinct tbin.Name
,(SELECT SUBSTRING(tbin.Name, 1, CHARINDEX(' ', tbin.Name) - 1) AS [FirstName])
,(select SUBSTRING(tbin.Name, CHARINDEX(' ', tbin.Name) + 1, 8000) AS LastName)
from tblInitialApplicants tbin
名字就像娜塔莉海洋贝利'名称可以是任意长度,也可以在名称的每个部分之间留出任意数量的空格。
预期成果:Natalie.B@gmail.com '娜塔莉' - 名字 ' B' - 姓氏的第一个字母
答案 0 :(得分:1)
您可以使用CHARINDEX获取char的位置,查找第一个空格并反转de name并查找最后一个。有了它,您可以轻松地对名字和姓氏进行子串。
DECLARE @Fullname VARCHAR(100) = 'Natalie Marine Baily';
select
*,
firstname+'.'+lastnameINITIAL+'@gamil.com'
from (
select
@Fullname Fullname,
SUBSTRING(@Fullname,1,CHARINDEX(' ',@Fullname,1)) firstname,
SUBSTRING(SUBSTRING(@Fullname,LEN(@Fullname)-CHARINDEX(' ',REVERSE(@Fullname),1)+2,CHARINDEX(' ',REVERSE(@Fullname),1)),1,1) lastnameINITIAL
) T
答案 1 :(得分:1)
DECLARE @name VARCHAR(200) = 'Natalie Marine Baily'
SELECT LEFT(@name,CHARINDEX(' ',@name,1)-1) + '.'+
LEFT(REVERSE(LEFT(REVERSE(@name),CHARINDEX(' ',REVERSE(@name),1)-1)),1) + '@gmail.com'
结果:
看看你是否可以在这里工作。
答案 2 :(得分:1)
你最大的问题是名字和姓氏之间可能有空格。那你怎么知道姓氏从哪里开始呢?例如Jean-Claude Van Damme。
在这种情况下,电子邮件应该是什么样子? jean-claude.v@gmail.com?
我建议您更改数据库以将名字和姓氏存储为单独的字段,或者更好的是还有一个电子邮件字段。然后这将更容易。如果你不能这样做,你将不得不生成一些可能的电子邮件并验证电子邮件是否存在。
How to check if an email address exists without sending an email?
如果您认为第一个单词是名字而最后一个单词是姓氏,那将是如何生成电子邮件。
DECLARE @Name varchar(100) = 'Natalie Marine Baily'
select SUBSTRING(@Name, 0, CHARINDEX(' ', @Name) - 1)
+ '.' + SUBSTRING(@Name,LEN( @Name) - CHARINDEX(' ',REVERSE(@Name))+2 , 1) + '@gmail.com'