使用 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?
我有一个全名字段,其数据格式为
姓氏名字中间名
一些数据没有中间名,但它只是
姓氏名字
还有一些数据在姓氏和名字之间有 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?