【问题标题】:How to create 2 new columns from name and surename included in 1 column in Teradata SQL?如何从 Teradata SQL 的 1 列中包含的姓名和姓氏创建 2 个新列?
【发布时间】:2021-09-23 06:54:30
【问题描述】:

我在 Teradata SQL 中有如下表:

NAME
Johnson Simon
Whats Ann
Pitt-House Mark
Grahap Michael Josh

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

因此我需要:

NAME SURNAME NAME_2
Johnson Simon Johnson Simon
Whats Ann Whats Ann
Pitt-House Mark Pitt-House Mark
Grahap Michael Josh Grahap Michael Josh

我认为可以做到,我们可以将“NAME”列中的第一个值带到第一个空白处,这将是 SURNAME 列的值,其余值提供给 NAME_2,但我不知道如何用 Teradata SQL 编写它,或者你有其他想法如何解决这个问题?

【问题讨论】:

    标签: sql teradata teradata-sql-assistant teradatasql


    【解决方案1】:

    使用STRTOK

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

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

    【讨论】:

    • @Koler 。 . .这对“Grahap Michael Josh”有用吗?
    • @GordonLinoff 你说得对。它需要改进以支持它作为 NAME_2。
    【解决方案2】:

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

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

    【讨论】:

    • 你是对的Godon,但我有错误:“使用无效数量或类型的参数调用函数regexp_replace,我该怎么办?
    • @koler 。 . .您可以明确说明第三个论点。但我认为 Teradata 支持双参数形式。
    • @GordonLinoff - 你是对的。如果省略了第三个参数,则匹配项将被删除。
    • TD_SYSFNLIB 中由 Teradata 提供的 REGEXP_REPLACE 确实支持 2 参数形式。但是在 SYSLIB 中可能有一些名为 REGEXP_REPLACE 的旧 UDF(在默认搜索顺序中位于 TD_SYSFNLIB 之前)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多