【发布时间】:2020-04-01 09:44:21
【问题描述】:
我在 Teradata 表中有一个名称值为 char(64) LATIN 的数据类型的列。这些值看起来像“SMITH JOHN J”、“Doe Jane Anne”等。元素之间的空间因值而异。我可以用左键解析出姓氏,但在解析名字和中间名首字母/名称时遇到问题。我尝试过使用索引和位置函数,但没有得到想要的结果。有没有人遇到过类似的情况?
【问题讨论】:
-
看看
strtok函数
我在 Teradata 表中有一个名称值为 char(64) LATIN 的数据类型的列。这些值看起来像“SMITH JOHN J”、“Doe Jane Anne”等。元素之间的空间因值而异。我可以用左键解析出姓氏,但在解析名字和中间名首字母/名称时遇到问题。我尝试过使用索引和位置函数,但没有得到想要的结果。有没有人遇到过类似的情况?
【问题讨论】:
strtok函数
您可以使用regexp_substr() 并调整occurence 参数,该参数指定要返回的出现次数:
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(任何但空格)使正则表达式更广泛。
【讨论】:
O'Hara 或逗号而不是空格。 StrTok(name, ' ,', 1) 在这种情况下要简单得多