如何从 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;
我在 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;