返回姓名中的第一个和最后一个单词 - postgres

时间:2014-03-12 00:24:41

标签: postgresql

我有一个名单,我想分开一个人姓名中的第一个和最后一个单词。

我试图使用“修剪”功能但没有成功。

有人可以解释我怎么能这样做?

表:

Names 
Mary Johnson Angel Smith
Dinah Robertson Donald
Paul Blank Power Silver

然后我希望得到结果:

Names
Mary Smith
Dinah Donald
Paul Silver

谢谢,

3 个答案:

答案 0 :(得分:3)

您只需使用正则表达式即可:

substring(trim(name) FROM '^([^ ]+)') || ' ' || substring(trim(name) FROM '([^ ]+)$')

当然,只有在100%的情况下才能使用至少第一个的姓氏。我不是百分之百地确定世界上每个人都是如此。例如:那对于中文名字有用吗?我不确定,我避免对人名做任何假设。最好的是simply ask the user two fields,一个用于"名称" "你想怎么称呼?"。

答案 1 :(得分:2)

另一种利用Postgres字符串处理内置函数的方法:

SELECT split_part(name, ' ', 1) as first_token,
split_part(name, ' ', array_length(regexp_split_to_array(name, ' '), 1)) as last_token
FROM mytable          

答案 2 :(得分:0)

这是我从其中带有点的电子邮件中提取全名的方式,例如Jeremy.Thompson@abc.com

SELECT split_part(email, '.', 1) || ' ' || replace(split_part(email, '.',  2), '@abc','')
FROM people   

结果:

  

杰里米汤普森


您可以轻松地用空格替换点:

SELECT split_part(email, ' ', 1) || ' ' || replace(split_part(email, ' ',  2), '@abc','')
FROM people