6

SSIS派生列で以下の式を複製する方法はありますか?

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

値の長さが 8 文字未満の場合、column1 の値を 0 で埋めたい

4

3 に答える 3

12

SSIS 式言語は三項演算子をサポートしています? :

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

その式は機能するはずですが、REPLICATE 呼び出しが 4k nvarchar 文字 (制限) であることを示すメタデータを返すため、機能しません。そのように動作させることに行き詰まっている場合は、コメントしてください。連結する前に、式をハックして複製の出力のサイズを調整しますcolumn1

より簡単な方法は、常に 8 つの先行ゼロを式に追加し、右側から切り取ることです。

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

あなたの例では18を使用しているように見えたので、2番目に18が必要になるかもしれませんが、概念は同じです。

于 2013-01-23T19:21:40.690 に答える
0

これは古い質問ですが、今日同じ質問があり、以下の派生列式が私にとってはうまくいきました。元の質問の SQL の例を (「REPLICATE」を使用して) 具体的に「複製」するわけではありませんが、データ フローで SSIS 派生列を使用して値をパディングする場合、以下のほうが少し簡単であることがわかりました。単純な「If / Else」ステートメントの例。元の質問で SQL が行っていることなので、10 個のゼロをパディングしています。

(LEN(column1) > 8) ? column1 : ("0000000000" + (column1))
于 2016-08-09T23:01:39.663 に答える
0

解決策は次のとおりです。グループを列ドロップダウンから列として取得し、これらの条件を導き出しました。グループが「Cash Capex」の場合は「Capex」AND ここで、「Internal Opex」OR「External Opex」の場合は「Opex」ELSE「その他」。

[`Group] == "Cash Capex" ? "Capex" : ([Group] =="Internal Opex" ? "Opex" :([Group] =="External Opex" ? "Opex":"Other"))`
于 2019-09-17T15:32:48.967 に答える