2013-01-23 30 views
4

有沒有在SSIS派生列中複製下面的表達式的方法?SSIS派生列(如果then ... else)

SELECT CASE 
      WHEN LEN(column1) > 8 
       THEN 
        column1 
       ELSE 
        REPLICATE('0', 18 - LEN(column1)) + column1 
      END AS column1 
FROM myTable 

欲墊列1與0的值,如果該值的lenght小於8字符

回答

10

SSIS表達式語言支持三元運算? :

(LEN([column1]) > 8) ? column1 : replicate("0", (18 - LEN([column1]))) + [column1] 

即表達應該工作,但它不會因爲REPLICATE調用將提供元數據表明它是4k nvarchar字符(限制)。如果你在得到它的工作方式,評論,我會砍的表達,大小與column1

一種更簡單的方法是串聯,只是隨時添加8個前導零的表達之前必須複製的輸出deadset和然後從右側切下。

RIGHT(REPLICATE("0",8) + column1,8) 

您可能需要18秒,因爲您的示例似乎使用18,但概念將是相同的。

+0

就像8位前導零的方法一樣。我還沒有看到那個......比我見過的其他實現簡單得多。 –

+0

工作,謝謝billinkc – Unal

0

這是一個古老的問題,但我今天有同樣的問題,下面的派生列表達式是爲我工作的。它並沒有特意「複製」原始問題中的SQL示例(通過使用「REPLICATE」),但是我發現在數據流中使用SSIS派生列填充值的過程稍微簡單一些,這是一個很好的一個簡單的「If/Else」語句的例子。 我填充了10個零,因爲這就是SQL在原始問題中的作用。

(LEN(column1) > 8) ? column1 : ("0000000000" + (column1))