4

私の SQL 2008 SSIS 環境では、CSV ファイルからのデータがあり、null 日付を修正する必要があります。

CSV からのデータは次のようになります。

01011990
01011990
01011990
01011990
01011990

私のステージング テーブルには、次のように定義された列があります。

[SHIPPED DATE] date NOT NULL

最初に、次の派生変換を使用して列をプッシュすることにより、日付の値を修正します。

(DT_DBDATE)(SUBSTRING([出荷日],1,2) + "/" + SUBSTRING([出荷日],3,2) + "/" + SUBSTRING([出荷日],5,4))

上記の変換により、文字列の日付が CSV インポートから SQL データベースの日付列にインポートされます。

これの出力は次のとおりです。

1990-01-01
1990-01-01
1990-01-01
1990-01-01
1990-01-01

Next、データベースの「NOT NULL」定義に忠実であり続けることができるように、NULL 日付を処理したいと思います。私がやりたいことは、NULL 日付にデフォルト値を割り当てることですが、以下のようなエラー メッセージが表示されます。

CSV から SQL へのエラー [派生列 [24817]]: データ型 "DT_WSTR" と "DT_DBDATE" は条件演算子と互換性がありません。オペランドの型は、条件演算の互換性のある型に暗黙的にキャストすることはできません。この操作を実行するには、一方または両方のオペランドをキャスト演算子で明示的にキャストする必要があります。

私のCSV列はWSTRで、SQL DBの宛先は「日付」列です。

私が使用しようとしている私の変換は次のとおりです: ISNULL([SHIPPED_DATE]) ? "1900-01-01" : [発送日]

上記のメッセージが原因で動作したくありません。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

11

以下のように表現を変更します。三項演算子には 2 つの部分があります。

Part 2派生列変換でこの値を既にキャストしているため、[SHIPPED_DATE]これはタイプです。DT_DBDATE

ただし、Part 1単に text として割り当てられます"1900-01-01"。三項演算子で指定された両方の値が同じデータ型になるように、その文字列値の前に ( ) を追加DT_DBDATEして日付形式に型キャストする必要があります。

から

 ISNULL([SHIPPED_DATE]) ? "1900-01-01" : [SHIPPED_DATE]

 ISNULL([SHIPPED_DATE]) ? (DT_DBDATE)"1900-01-01" : [SHIPPED_DATE]
于 2012-10-31T20:38:48.290 に答える