如何从 Teradata SQL 的 1 列中包含的姓名和姓氏创建 2 个新列?

How to create 2 new columns from name and surename included in 1 column in Teradata SQL?

我在 Teradata SQL 中有 table,如下所示:

姓名
约翰逊·西蒙
什么是安
皮特豪斯马克
格拉哈普·迈克尔·乔希

列中的 table:“NAME”包含客户的名字和姓氏,但请注意,有时客户可以有两个姓氏或两个名字。

因此我需要:

姓名 姓氏 NAME_2
约翰逊·西蒙 约翰逊 西蒙
什么是安 什么
皮特豪斯马克 皮特学院 马克
格拉哈普·迈克尔·乔希 Grahap 迈克尔·乔希

我认为,这是可以做到的,我们可以从“NAME”列中获取第一个值到第一个白色 space,它将是 SURNAME 列的值,其余值赋予 NAME_2,但我不知道如何在 Teradata 中写入它 SQL,或者您有其他想法如何解决这个问题?

看起来第一个 space 之前的所有内容都是姓氏。其他一切都是 name_2。一种方法是 regexp_substr():

select regexp_substr(name, '^[^ ]+') as surname,
       regexp_replace(name, '^[^ ]+ ', '') as name_2

使用STRTOK

它根据指定的分隔符列表和 returns 第 n 个标记拆分标记,其中 n 由 tokennum 参数指定。

SELECT NAME, STRTOK(your_table.NAME, ' ', 1) as SURNAME, STRTOK(your_table.NAME, ' ', 2) as NAME_2 FROM your_table;