Teradata解析全名字段sql

Teradata解析全名字段sql,sql,teradata,Sql,Teradata,在Teradata表中,有一列的名称值的数据类型为char(64)LATIN。这些值看起来像“SMITH JOHN J”、“Doe Jane Anne”等。元素之间的空间因值而异。我能够用左键解析出姓氏,但解析出名字和中间的首字母/名称时遇到困难。我尝试过使用索引和位置函数,但没有得到预期的结果。有人遇到过类似的情况吗?您可以使用regexp\u substr()并调整occurrence参数,该参数指定要返回的事件数: select regexp_substr(name, '\w+'

在Teradata表中,有一列的名称值的数据类型为char(64)LATIN。这些值看起来像“SMITH JOHN J”、“Doe Jane Anne”等。元素之间的空间因值而异。我能够用左键解析出姓氏,但解析出名字和中间的首字母/名称时遇到困难。我尝试过使用索引和位置函数,但没有得到预期的结果。有人遇到过类似的情况吗?

您可以使用
regexp\u substr()
并调整
occurrence
参数,该参数指定要返回的事件数:

select 
    regexp_substr(name, '\w+', 1, 1) last_name,
    regexp_substr(name, '\w+', 1, 2) middle_name,
    regexp_substr(name, '\w+', 1, 3) first_name
from mytable

在Teradata使用的PCRE表示法中,
\w
匹配单词字符(字母数字和下划线)。您可能希望使用
\S
(除空格外的任何内容)使正则表达式更宽一些。

您可以使用
regexp\u substr()
并调整
occurrence
参数,该参数指定要返回的发生次数:

select 
    regexp_substr(name, '\w+', 1, 1) last_name,
    regexp_substr(name, '\w+', 1, 2) middle_name,
    regexp_substr(name, '\w+', 1, 3) first_name
from mytable

在Teradata使用的PCRE表示法中,
\w
匹配单词字符(字母数字和下划线)。您可能希望使用
\S
(除空格外的任何内容)使正则表达式更宽一些。

查看
strtok
函数查看
strtok
函数谢谢。这个函数很容易就解决了我的问题。希望没有连字符的名字,或者用
O'Hara
或者逗号代替空格<代码>StrTok(名称,,,1)在这种情况下更简单谢谢。这个函数很容易就解决了我的问题。希望没有连字符的名字,或者用
O'Hara
或者逗号代替空格<代码>StrTok(名称,,,1)在本例中要简单得多