如何将电子邮件地址中名字和姓氏的第一个字母大写?

Posted

技术标签:

【中文标题】如何将电子邮件地址中名字和姓氏的第一个字母大写?【英文标题】:How to capitalize first letter of first name and surname from an email address? 【发布时间】:2019-04-25 14:18:04 【问题描述】:

我正在尝试从电子邮件地址中提取姓名,其格式始终为firstname.lastname@domain

我使用以下语句完成了此操作:

replace(left(column, charindex('@', column) - 1), '.', ' '), 1)) AS Requestor

但是,有些电子邮件的名称是小写的,如果是这种情况,我也需要大写。 joe bloggs = Joe Bloggs

是创建执行此操作的函数的最佳选择,还是有人可以建议对上述语句进行更新以处理此问题?

【问题讨论】:

请提供样本数据和期望的结果。 所说的“大写”是什么意思? 提示:UPPER(). 可能是这样的:***.com/a/55057/3489104 @GordonLinoff 名字和姓氏的第一个字母要大写 名字应该有两个大写字母的人怎么办,比如麦当劳? 【参考方案1】:

按目前的情况回答您的问题,这是相当基本的字符串操作,正如您从下面代码的冗长中看到的那样,这不是 SQL Server 的强项:

declare @e table (e varchar(100));
insert into @e values('tom.mcdonald@email.com'),('dan.oneill@email.com')

select e.e
      ,upper(left(f,1)) + substring(f,2,999) + ' ' + upper(left(s,1)) + substring(s,2,999) as n
from @e as e
    cross apply(values(substring(e.e,1,charindex('.',e.e)-1)
                      ,substring(e.e,charindex('.',e.e)+1,charindex('@',e.e,1)-charindex('.',e.e)-1)
                      )
               ) as n(f,s);

输出

+------------------------+--------------+
|           e            |      n       |
+------------------------+--------------+
| tom.mcdonald@email.com | Tom Mcdonald |
| dan.oneill@email.com   | Dan Oneill   |
+------------------------+--------------+

【讨论】:

【参考方案2】:

我愿意:

select upper(left(fname, 1)) + right(fname, len(fname) - 1) + ' ' + upper(left(lname, 1)) + right(lname, len(lname) - 1) as Requestor
from table t cross apply
     ( values ( left(col, charindex('@', col) - 1) ) 
     ) t(nm) cross apply
     ( values ( left(nm, charindex('.', nm)-1), right(nm, charindex('.', reverse(nm))-1) ) 
     )  t1(fname, lname);

【讨论】:

【参考方案3】:

如果您遇到提取名称并将第一个字母大写的麻烦,那么我不会将它们混在一起。相反,我会将它们保留为两列,因此您所做的任何进一步操作都不需要更多拆分。

您可以利用(abusePARSENAME 函数根据. 拆分字符串,这样您就可以使用类似:

-- CAPITALISE FIRST LETTER WITH STUFF AND UPPER
SELECT  Forename = STUFF(t2.Forename, 1, 1, UPPER(LEFT(t2.Forename, 1))),
        Surname = STUFF(t2.Surname, 1, 1, UPPER(LEFT(t2.Surname, 1)))
FROM    (VALUES ('joe.blogs@domain.com')) x ([Column])
-- EXTRACT CHARACTERS TO THE LEFT OF THE @ SIGN
CROSS APPLY (SELECT LEFT([Column], CHARINDEX('@', [Column]) - 1)) AS t1 (FullName)
-- EXTRACT FIRST AND LAST NAME USING PARSENAME
CROSS APPLY (SELECT PARSENAME(FullName, 2), PARSENAME(FullName, 1)) AS t2 (Forename, Surname)

【讨论】:

【参考方案4】:

您可以使用 upper() 将整个字符串大写:

upper(replace(left(column, charindex('@', column) - 1), '.', ' '), 1)))

您可以使用stuff() 将第一个字符大写:

stuff(replace(left(column, charindex('@', column) - 1), '.', ' '),
      1, 1, upper(left(column, 1))
     )

【讨论】:

使用上述代码时出错stuff requires 4 arguments【参考方案5】:

试试这个:

declare @t table (email varchar(50))

insert into @t values ('xyz.xyz@gmail.com')

select upper(SUBSTRING(email,1,1)) + SUBSTRING(email,2,CHARINDEX('.',email)-1)+upper(SUBSTRING(email,CHARINDEX('.',email)+1,1)) + SUBSTRING(email,CHARINDEX('.',email)+2,len(email))   from @t

【讨论】:

以上是关于如何将电子邮件地址中名字和姓氏的第一个字母大写?的主要内容,如果未能解决你的问题,请参考以下文章

中文名如何转换正确英文名

如何在 Mailchimp 中仅获取成员字段名称(电子邮件地址、名字、姓氏)

正则表达式组倒序

根据名字和姓氏值自动填写和匹配电子邮件输入

我将如何使用二维数组来打印季度和总计

Oracle中的SQL语句的题目,求解答啊