2016-07-14 47 views
0

嘗試在BIDS 2008中設置SSIS派生列。我有一個包含管道分隔字符串的單列輸入[列0]。我需要一個公式從輸入列中提取其中一個「字段」,但長度是可變的。這裏是我現在使用的公式:SSIS子字符串使用長度公式

SUBSTRING([Column 0],(FINDSTRING([Column 0], "|",10)+1),(FINDSTRING([Column 0], "|",11)-FINDSTRING([Column 0],"|",10)-1)) 

當我輸入該公式時,它變爲紅色並且表示長度參數無效。嘗試通過查找分隔符的下一次迭代的位置,然後從分隔符的當前迭代的位置中減去來確定數據的長度。

當我用靜態數字替換公式的長度部分時,錯誤消失。

有人可以幫我糾正上面的公式嗎?謝謝!

+0

**此問題是由於無法再現的問題或簡單的印刷錯誤造成的。雖然類似的問題可能在這裏討論,但這個問題的解決方式不太可能有助於未來的讀者。這通常可以通過識別並密切檢查在發佈之前重現問題所需的最短程序來避免。 –

回答

0

使用由SSIS提供的TOKEN函數來拆分|並找到您想要的「字段」。

TOKEN(SSIS表達式)

返回從基於指定的分隔符的字符串的令牌(子串)將要返回的字符串和該令牌表示令牌的數目在不同的令牌。

TOKEN(character_expression, delimiter_string, occurrence) 
+0

不幸的是,這個解決方案對我不起作用。我正在使用BIDS 2008,並且TOKEN功能直到2012版本才實施。 – LegalEagle

+0

在這種情況下,你在做什麼應該工作,只是要小心,你正在平衡你括號等。 – StackOverflowGuest

+0

應該工作,但沒有。它告訴我長度參數無效。我一次構建公式一段,然後將它們一起復制/粘貼,所有括號都應該在那裏。是否有任何其他原因,你知道它會說長度參數將無效? – LegalEagle

0

FOUND問題!!我的平面文件數據源的輸出列被設置爲5000的寬度。我將寬度調整到4000,然後關閉然後重新打開項目。由於元數據的變化,它顯示我在平面文件上出現錯誤。當我重新保存文件,然後重新輸入上面的公式時,所有按預期工作。

謝謝大家!

相關問題