0

我在 Teradata SQL 中有如下表:

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

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

结果我需要:

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

我认为可以做到,我们可以将“NAME”列中的第一个值带到第一个空格,它将是 SURNAME 列的值,其余值给 NAME_2,但我不知道如何写在 Teradata SQL 中,或者您可能有其他想法如何解决此问题?

4

2 回答 2

2

使用STRTOK

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

SELECT NAME, STRTOK(your_table.NAME, ' ', 1) as SURNAME, STRTOK(your_table.NAME, ' ', 2) as NAME_2 FROM your_table;
于 2021-07-14T10:25:59.337 回答
1

看起来直到第一个空格的所有内容都是姓氏。其他一切都是name_2。一种方法是regexp_substr()

select regexp_substr(name, '^[^ ]+') as surname,
       regexp_replace(name, '^[^ ]+ ', '') as name_2
于 2021-07-14T10:19:15.523 回答