Teradata 解析全名字段 sql
Teradata Parsing Full Name field sql
我在 Teradata table 中有一列的名称值的数据类型为 char(64) LATIN。这些值看起来像 'SMITH JOHN J '、'Doe Jane Anne ' 等。元素之间的空格因值而异。我可以用左键解析出姓氏,但无法解析出名字和中间名 initial/name。我试过使用索引和位置函数,但没有得到想要的结果。有没有人遇到过类似的情况?
您可以使用 regexp_substr()
并调整 occurence
参数,指定出现的次数为 return:
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
(任何 但 和 space)使正则表达式更宽一些。
我在 Teradata table 中有一列的名称值的数据类型为 char(64) LATIN。这些值看起来像 'SMITH JOHN J '、'Doe Jane Anne ' 等。元素之间的空格因值而异。我可以用左键解析出姓氏,但无法解析出名字和中间名 initial/name。我试过使用索引和位置函数,但没有得到想要的结果。有没有人遇到过类似的情况?
您可以使用 regexp_substr()
并调整 occurence
参数,指定出现的次数为 return:
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
(任何 但 和 space)使正则表达式更宽一些。