从电子邮件中提取人名

时间:2017-08-31 09:40:07

标签: sql postgresql email

我有一个只有一行包含电子邮件地址的大表,我需要从可能的电子邮件中获取人们的姓名。例如,从邮件daniela.meyer@example.de我需要一个名字(daniela)和一个姓氏(meyer)。 我想我需要带有人名的表格,并将每封电子邮件与此数据库进行比较。但我无法理解进行这种比较的正确方法是什么?

3 个答案:

答案 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作为姓氏。