我有一个只有一行包含电子邮件地址的大表,我需要从可能的电子邮件中获取人们的姓名。例如,从邮件daniela.meyer@example.de我需要一个名字(daniela)和一个姓氏(meyer)。 我想我需要带有人名的表格,并将每封电子邮件与此数据库进行比较。但我无法理解进行这种比较的正确方法是什么?
答案 0 :(得分:1)
您可以使用SUBSTRING
SELECT SUBSTRING(email_column_name,0, CHARINDEX('@',email_column_name)) FROM table_name
但无法将其验证为名称。
更新后的答案:如果您不想在电子邮件地址忽略数字,请尝试REPLACE
SELECT REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE
(REPLACE (SUBSTRING(email_column_name,0, CHARINDEX('@',email_column_name)), '0', ''),
'1', ''),
'2', ''),
'3', ''),
'4', ''),
'5', ''),
'6', ''),
'7', ''),
'8', ''),
'9', '') FROM table_name
注意:在SQL Server 2012中完美运行
答案 1 :(得分:0)
试试这个:
SELECT LEFT(emailaddress, CHARINDEX('@', emailaddress) - 1)
它寻找@的位置,并且取符号数量但不包括(#1; - 1)@符号。
要注意没有@的琴弦;你将结束一个空字符串。
如果您将数据存放在不同的数据库或不同的表中,我并不完全了解。我也不知道你想要哪种sql语言。
运气,
答案 2 :(得分:0)
在Postgres中,您可以使用split_part来获取分隔字符串的元素:
select split_part(split_part(email, '@', 1), '.', 1) as firstname,
split_part(split_part(email, '@', 1), '.', 2) as lastname
from the_table;
内部split_part()
将在@
之前提取部分,而外部split_part()
则从中获取第一个和第二个元素。
请注意,您无法通过该方式验证电子邮件真正结构。 dent.arthur@h2gc.com
会导致dent
作为名字,arthur
作为姓氏。