-1

我需要你们的紧急帮助,我有一个代表用户全名的列,现在我想把它分成名字和姓氏。

Full name 的格式是“World, hello”,现在这里的名字是hello,姓氏是world。

我正在使用派生列(SSIS)并为名字使用右函数,为姓氏使用子字符串函数,但这些结果似乎是空白的,即使我也是空白的。:)

4

1 回答 1

2

它对我有用。一般来说,您应该在问题中提供更多关于此类位置的详细信息,以帮助其他人重新创建和解决您的问题。您没有指定我们是否需要解决此字段中的 NULL,我也不知道您想如何解释它,因此这个答案还有改进的余地。

我从一个简单的 OLE DB 源开始,硬编码了一个查询“SELECT 'World, Hello' AS Name”。

我创建了 2 个派生列任务。第一个向数据流中添加了一个名为 FirstCommaPosition 的列。我使用的公式是FINDSTRING(Name,",", 1)如果 NAME 可以为空,那么我们需要在调用 FINDSTRING 函数之前测试可空性。然后,您需要确定在 NULL 的情况下如何存储拆分数据。我会假设第一个和最后一个都应该为空,但我不知道

在不同的步骤中执行此操作有两个原因。首先是性能。听起来有悖常理,在派生列中做的更少会带来更好的性能,因为 SSIS 引擎可以更好地并行化操作。另一个更简单 - 我将需要使用此值来拆分名字和姓氏,因此引用列比复制粘贴公式更容易且维护更少。

第二个派生列将实际执行拆分。

我的 FirstNameUnicode 列使用这个公式(FirstCommaPosition > 0) ? RTRIM(LTRIM(RIGHT(Name,FirstCommaPosition))) : "" 说“如果我们在前面的步骤中找到了一个逗号,那么从逗号的位置到字符串末尾的所有内容都切掉并应用修剪操作。如果我们没有找到一个逗号,那么就返回一个空白字符串。表达式的默认字符串类型将是 Unicode (DT_WSTR),因此如果您不需要,您需要将结果转换为正确的字符串代码页 (DT_STR)

我的 LastNameUnicode 列使用这个公式(FirstCommaPosition > 0) ? SUBSTRING(Name,1,FirstCommaPosition -1) : ""与上面类似的逻辑,除了现在我使用 SUBSTRING 操作而不是 RIGHT。SSIS 2012 版及更高版本的用户很高兴您可以使用 LEFT 函数而不是 SUBSTRING。另请注意,您需要后退 1 个位置才能删除逗号。

在此处输入图像描述

于 2013-03-02T15:56:31.820 回答