2014-11-03 105 views
0

我试图从全名生成电子邮件。以下是我有什么,我卡在这里拆分和合并字符串

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 

名称就像'娜塔莉海洋贝利'。名称可以是任意长度,名称的每个部分之间也可以有任意数量的空格。

预期结果:[email protected] “娜塔莉” - 名字 “B” - 姓氏

回答

1

你可以得到CHARINDEX一个字符的位置的第一个字母,寻找第一空间和反向名称,并寻找最后一个。有了这个,你可以很容易地将首字母和姓氏分开。

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
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' 

结果:

enter image description here

只是看到,你是否可以从这里工作。

1

你最大的问题是名字和姓氏之间可以有空格。那么你怎么知道姓氏的开头?例如Jean-Claude Van Damme。

在这种情况下,电子邮件应该是什么样子? [email protected]

我会建议你改变你的数据库来存储姓名作为单独的字段,或更好地有一个电子邮件字段。那么这会容易得多。如果你不能这样做,你将不得不生成一些可能的电子邮件,并验证电子邮件是否存在。

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'