我正在尝试在 SQL Server 2008 上进行查询,以获取基于表FullName
列的电子邮件建议Person
。
例如:对于Person
命名Rodrigo David Waltenberg
的查询应该返回rodrigo.waltenberg@company.com
但我不知道如何将全名拆分并全部小写。全名也可能有中间名,但我只需要名字和姓氏。任何人都知道如何使用 SQL 来做到这一点?
我正在尝试在 SQL Server 2008 上进行查询,以获取基于表FullName
列的电子邮件建议Person
。
例如:对于Person
命名Rodrigo David Waltenberg
的查询应该返回rodrigo.waltenberg@company.com
但我不知道如何将全名拆分并全部小写。全名也可能有中间名,但我只需要名字和姓氏。任何人都知道如何使用 SQL 来做到这一点?
利用 Google 的魔力通常会大有帮助
LOWER ( character_expression )
将字符串转为小写。
REPLACE ( string_expression , string_pattern , string_replacement )
用您在给定字符串中指定的其他字符串替换您想要的任何内容...
所以只需将两者结合起来,然后这样做:
REPLACE(LOWER(Fullname), ' ','.')
如果这还不够,只需要第一个和最后一个部分,那么省略中间部分又是小菜一碟。
第 1 步: “字符串中字符的 MS SQL 索引”,首先点击:
CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )
第2步:
LEFT ( character_expression , integer_expression )
第 3 步:
RIGHT ( character_expression , integer_expression )
第4步:
REVERSE ( string_expression )
如果它总是正确的,那么名称至少有两个部分由至少一个空格字符分隔,只需将这些部分连接在一起:
LOWER(
LEFT(Fullname, CHARINDEX(' ',Fullname)-1) +
'.' +
RIGHT(Fullname, CHARINDEX(' ', REVERSE(Fullname))-1)
) + '@whatever.com' as suggestion
此外,如果 Fullname 列可以包含前导和尾随空格,请使用 TRIM 删除它们...这会使它变得混乱...
CASE
--when there are at least two spaces ( optimally 3 names, or double spaces between names)
WHEN LEN(Fullname)-LEN(REPLACE(Fullname, ' ','')) >1
THEN
LOWER(
LEFT(Fullname, CHARINDEX(' ',Fullname)-1) +
'.' +
RIGHT(Fullname, CHARINDEX(' ', REVERSE(Fullname))-1)
)
ELSE
--at most one space in name
REPLACE(LOWER(Fullname), ' ','.')
END + '@whatever.com' as suggestion
并且请仍然记得在发布问题之前进行研究并尝试一些事情。