我正在尝试在SQL Server 2008上进行查询,该查询根据FullName
表的Person
列获取电子邮件建议。
例如:对于名为Person
的{{1}},查询应返回Rodrigo David Waltenberg
但我不知道如何分割全名和全部小写。全名也可能有中间名,但我只需要名字和姓氏。任何人都知道如何使用SQL?
答案 0 :(得分:2)
利用Google的魔法权力经常会有很大帮助
"MS SQL lowercase string", 1st hit:
LOWER ( character_expression )
将字符串转换为小写。
"MS SQL replace string", 1st hit:
REPLACE ( string_expression , string_pattern , string_replacement )
用你在给定字符串中指定的另一个字符串替换你想要的任何东西......
所以只需将两者结合起来,就这样做:
REPLACE(LOWER(Fullname), ' ','.')
如果这还不够,只有第一部分和最后一部分都是neededed,那么中间部分就是一块蛋糕了。
第1步: "MS SQL index of char in string", first hit:
CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )
第2步:
"MS SQL leftmost characters of string", first hit:
LEFT ( character_expression , integer_expression )
第3步:
"MS SQL rightmost characters of string", first hit:
RIGHT ( character_expression , integer_expression )
第4步:
"MS SQL reverse string", first hit:
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
请仍然记得做研究并在发帖前做尝试。