拆分和合并字符串

时间:2014-11-03 10:54:49

标签: sql sql-server sql-server-2008

我试图通过全名生成电子邮件。以下是我所拥有的,而且我被困在这里

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' - 姓氏的第一个字母

3 个答案:

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

结果:

enter image description here

看看你是否可以在这里工作。

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