Postgresql 在postgres中将全名拆分为名字和姓氏

Postgresql 在postgres中将全名拆分为名字和姓氏,postgresql,Postgresql,我对将全名分为名字和姓氏的功能感到困惑。例如,我有这些记录 fullname --------------- john john doe john nick doe john smith nick doe 我期待这样的结果 名字 姓氏 厕所 厕所 厕所 雌鹿 约翰·尼克 雌鹿 约翰·史密斯·尼克 雌鹿 您可以在此处使用REGEXP\u REPLACE: 选择 全名, REGEXP_替换(全名'\s+\s+$','')为fir

我对将全名分为名字和姓氏的功能感到困惑。例如,我有这些记录

      fullname
     ---------------
         john
        john doe
     john nick doe
  john smith nick doe
我期待这样的结果

名字 姓氏 厕所 厕所 厕所 雌鹿 约翰·尼克 雌鹿 约翰·史密斯·尼克 雌鹿
您可以在此处使用
REGEXP\u REPLACE

选择
全名,
REGEXP_替换(全名'\s+\s+$','')为firstname,
REGEXP_替换(全名“^.*\s+(\s+$”,“\1”)为lastname
从你的桌子上;

下面是对用于姓氏的regex模式的解释(用于姓氏的模式是对其的简化):

^从全名开始
*贪婪地匹配所有内容,直到
\s+最后一个空格(s)
(\S+)然后匹配并捕获全名中的最后一个单词(即姓氏)
$全名的结尾
然后,我们使用
\1
替换为捕获的姓氏