Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS派生列转换_Ssis - Fatal编程技术网

SSIS派生列转换

SSIS派生列转换,ssis,Ssis,我正在尝试开发一个包含字符串(格式为1.02.3.04或01.02.03.4以及许多其他排列)的包,并根据以下规则对其进行修改 如果第二个字符是“.”,则用0填充第一个组 FINDSTRING([mycolname],“,”,1)返回第一个“.”的位置。对于2的所有值,然后应用此规则并修改字符串,例如,如果1.2.3.4将返回2,则字符串应为01.2.3.4 如果“.”的第二个实例是5个FINDSTRING([mycolname],“”,2),则在第三个字符(例如01.02.3.4)后添加一个0

我正在尝试开发一个包含字符串(格式为1.02.3.04或01.02.03.4以及许多其他排列)的包,并根据以下规则对其进行修改

  • 如果第二个字符是“.”,则用0填充第一个组 FINDSTRING([mycolname],“,”,1)返回第一个“.”的位置。对于2的所有值,然后应用此规则并修改字符串,例如,如果1.2.3.4将返回2,则字符串应为01.2.3.4

  • 如果“.”的第二个实例是5个FINDSTRING([mycolname],“”,2),则在第三个字符(例如01.02.3.4)后添加一个0

  • 如果“.”的第三个实例是8个FINDSTRING([mycolname],“”,3),则在第6个字符后添加0

  • 我有点被一些逻辑所束缚


    SSIS 2012中的任何帮助都可以通过一行衍生列实现:

    RIGHT("00" + TOKEN("1.02.3.04",".",1),2) + "." + RIGHT("00" + TOKEN("1.02.3.04",".",2),2) + "." + RIGHT("00" + TOKEN("1.02.3.04",".",3),2) + "." + RIGHT("00" + TOKEN("1.02.3.04",".",4),2) 
    

    只是要明确一点,您是否按顺序应用每个规则?那么,首先检查第一条规则并更改字符串,然后检查第二条规则并更改字符串,然后是第三条规则?或者规则是针对原始字符串进行测试的?更一般地说,您只需要将所有字符串转换为0W.0X.0Y.Z形式,对吗?Kyle-我认为按顺序是回答第二部分的方法-我希望所有字符串的格式都是99.99.99.99,所有数字都在10以下,并有一个前导零。这样做的原因是为了实现一致的排序,因为目前数据没有可重复的结构。理想情况下,我希望将数据分解为四个独立的元素,并在稍后使用concat。分隔符,但这还有一点距离。您使用的是什么版本的SSI?Jayvee-这几乎是一个绝妙的解决方案。唯一的问题是此派生列的输出不包括。回到弦上。输出的格式为1.1.1.1到01010101-@JamesK-添加了点,请现在尝试。Jayvee-你是一个明星,它带来了乐趣。正如我所理解的,这个过程读取的字符串一直到第一个。然后添加前导零,但返回两个字符,然后在第二次出现的。并执行相同的字符串操作,然后在。etc@JamesK-是的,没错。Token将字符串拆分为“.”,我们可以选择任何ocurrence。我们选择了每一个,做了前导零位,然后将它们连接起来,再次在眼圈之间添加点。如果这对您有效,请将答案标记为已接受。谢谢