如何将电子邮件地址中名字和姓氏的第一个字母大写?
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】:如果您遇到提取名称并将第一个字母大写的麻烦,那么我不会将它们混在一起。相反,我会将它们保留为两列,因此您所做的任何进一步操作都不需要更多拆分。
您可以利用(abuse)PARSENAME
函数根据.
拆分字符串,这样您就可以使用类似:
-- 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
【讨论】:
以上是关于如何将电子邮件地址中名字和姓氏的第一个字母大写?的主要内容,如果未能解决你的问题,请参考以下文章