我需要你们的紧急帮助,我有一个代表用户的全名一栏的东西,现在我想将它分为姓和名。
全名的格式为“世界,你好”,现在这里的第一个名字就是hello和姓氏是世界。
我使用派生列(SSIS),并使用正确的函数的名字和字符串函数的姓氏,但这些结果似乎是空白的,这其中甚至我是空白的。 :)
我需要你们的紧急帮助,我有一个代表用户的全名一栏的东西,现在我想将它分为姓和名。
全名的格式为“世界,你好”,现在这里的第一个名字就是hello和姓氏是世界。
我使用派生列(SSIS),并使用正确的函数的名字和字符串函数的姓氏,但这些结果似乎是空白的,这其中甚至我是空白的。 :)
它为我工作。 在一般情况下,你应该提供更多的细节在你的问题上的地方,如这个帮助别人重建并解决您的问题。 您没有指定我们是否需要解决的NULL在这个领域,我也不知道你会如何想诠释它,以便有空间在这个答案改善。
我开始用一个简单的OLE DB源和硬编码的“SELECT‘世界,你好’的姓名”查询。
我创建了2个派生列任务。 第一个添加到数据流的列名为FirstCommaPosition。 我用的公式是FINDSTRING(Name,",", 1)
如果name为空,那么我们就需要调用FINDSTRING功能之前,测试空性。 然后,您需要确定你将要如何分割数据存储在空值的情况。 我将承担第一和最后都应该被清零,但我不知道 。
有两个原因,在单独的步骤执行此操作。 首先是性能。 作为反直觉的,因为它的声音,更好的性能,在做一个派生列结果少,因为SSIS引擎可以更好的并行操作。 另一种是更简单 - 我将需要使用这个值来做出姓和名分开所以这将是更容易,更少的维护来引用列,而不是复制粘贴的公式。
第二个派生列是要实际执行分裂。
我的FirstNameUnicode列使用此式(FirstCommaPosition > 0) ? RTRIM(LTRIM(RIGHT(Name,FirstCommaPosition))) : ""
(FirstCommaPosition > 0) ? RTRIM(LTRIM(RIGHT(Name,FirstCommaPosition))) : ""
那个说:“如果我们发现在前面的步骤一个逗号,然后切片进行一切从逗号的位置到字符串的结尾和应用修剪操作。如果我们没。 “找不到一个逗号,然后就返回一个空字符串。为表达默认字符串类型将是个Unicode(DT_WSTR),所以如果这不是你的需要,你需要将结果转换为正确的字符串代码页(DT_STR)
我的LastNameUnicode列使用此式(FirstCommaPosition > 0) ? SUBSTRING(Name,1,FirstCommaPosition -1) : ""
(FirstCommaPosition > 0) ? SUBSTRING(Name,1,FirstCommaPosition -1) : ""
类似的逻辑如上述除了现在我使用SUBSTRING操作,而不是RIGHT的。 2012年发布SSIS和超越的用户,飘柔FO可以使用左功能,而不是子串。 另外请注意,您将需要后退1位,除去逗号。