使用 SSIS 表达式将 Full Name 分解为单独的字段,Last First Middle

Use SSIS expresion to break up Full Name in to Seperate fields, Last First Middle

我有一个全名字段,其数据格式为

姓氏名字中间名

一些数据没有中间名,但它只是

姓氏名字

还有一些数据在姓氏和名字之间有 2 个空格

姓氏名字

所有这些数据都在同一个字段中,我如何使用 SSIS 表达式将这些数据分成 3 个单独的字段?

由于“De los Santos Edwin Paul”之类的名字或许多多姓条件中的任何一个,您在这里的体验会很糟糕。

我提倡在这种情况下使用多个派生列来帮助您确定哪里出了问题,以便将来进行调试。

假设名称数据列称为 NameFull

DER 子双精度空间

我要做的第一件事就是简化你的生活。我不会在姓氏和名字之间为一个 space 和两个 space 编写两个条件,而是让所有内容都与一个 space.

一致

通过名为 Name 的派生列组件创建一个新列,我们将用单个 space 替换所有双 space。

REPLACE([NameFull], "  ", " ")

DER GetFirstSpace

向数据流添加一个新的派生列组件。添加一个名为 FirstSpace 的新列。我们要使用的表达式是 FINDSTRING

FINDSTRING([Name], " ", 1)

DER GetLastName

将另一个派生列组件添加到组合中。这将使用我们的新列 FirstSpace 的值来切出第一个元素,我将把它填充到名为 LastName

的列中
SUBSTRING([Name], 1, [FirstSpace])

DER 获取第二个空间

向数据流添加一个新的派生列组件。添加一个名为 SecondSpace 的新列。我们要使用的表达式与第一个类似,但第三个参数将是我们找到的最后一个 space 的位置(加 1 以跳过它)

FINDSTRING([Name], " ", [FirstSpace])

DER GetSecondName

与 LastName 类似,只是现在我们将使用 First 和 Second spaces

SUBSTRING([Name], [FirstSpace]+1, [SecondSpace])

DER 中间名

此时,您可以看到模式,但现在我们必须处理您的实际数据,而我没有。如果他们没有列出中间名怎么办?中间名的 lazy/safe 方法可能是添加一个派生列并只取最右边的 N 个字符。如果他们有中间名,这将把它捡起来,否则,它应该只是空白。

RIGHT([Name], LEN([Name]) - [SecondSpace] +1)

采用类似方法的答案

  • How can I turn a string into a decimal in SSIS using a derived column?