我需要你们的紧急帮助,我有一个代表用户全名的专栏,现在我想把它分成名字和姓氏。
全名的格式是“World,hello”,现在这里的第一个名字是hello,姓氏是世界。
我使用Derived Column(SSIS)并使用Right Function for First Name和substring函数作为姓氏,但这些结果似乎是空白的,即使我是空白的。 :)
答案 0 :(得分:2)
这对我有用。一般而言,您应该在问题中提供更多详细信息,以帮助其他人重新创建问题并排查问题。您没有指定我们是否需要在此字段中解决NULL,也不知道您希望如何解释它,因此这个答案还有改进的余地。
我从一个简单的OLE DB源开始,并硬编码了一个“SELECT'World,Hello'AS Name”的查询。
我创建了2个派生列任务。第一个向数据流添加一个名为FirstCommaPosition的列。我使用的公式是FINDSTRING(Name,",", 1)
如果NAME是NULLable,那么我们需要在调用FINDSTRING函数之前测试可为空性。然后,您需要确定在NULL的情况下如何存储拆分数据。我会假设第一个和最后一个都应该为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。 2012年发布的SSIS及更高版本的用户很高兴您可以使用LEFT功能而不是SUBSTRING。另请注意,您需要退出1个位置才能删除逗号。