在 SSIS 中使用正确的函数拆分列中的值

2024-01-12

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

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

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


它对我有用。一般来说,您应该在此类问题中提供更多详细信息,以帮助其他人重现您的问题并对其进行故障排除。您没有指定我们是否需要解决该字段中的 NULL,我也不知道您想要如何解释它,因此这个答案还有改进的空间。

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

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

分步骤执行此操作有两个原因。首先是性能。尽管听起来违反直觉,但在派生列中执行更少的操作会带来更好的性能,因为 SSIS 引擎可以更好地并行化操作。另一个更简单 - 我需要使用这个值来分割名字和姓氏,这样引用列比复制粘贴公式更容易,维护更少。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SSIS 中使用正确的函数拆分列中的值 的相关文章

随机推荐