3

次の形式の日付列を持つCSVファイルmm/dd / yyyy(4/20/2012)があり、この列をyyyy-mm-dd(2012-04- 20)。

私はこの目的のために派生列変換を使用し、次のように記述および表現しました

(DT_WSTR)(SUBSTRING(ReceivedDateTime,1,4) + "-" + 
SUBSTRING(ReceivedDateTime,5,2) + "-" + SUBSTRING(ReceivedDateTime,7,2)) 

パッケージを実行すると、エラーがスローされますUnable to perform type cast

4

3 に答える 3

5

CSVファイルからの受信値が常に04/20/2012MM/DD/YYYY)のようにフォーマットされている場合は、型キャストを実行する必要はありません。dateファイル内の値をデータ型として扱うようにフラットファイル接続マネージャーを構成する必要があります。

CSVファイルが次のようになり、1つの列に日付が含まれていると仮定します。

CSVファイル

SSISパッケージで、CSVファイルを読み取るためのフラットファイル接続マネージャーを作成します。パスにCSVを保存しましたC:\temp\Source.csv

フラットファイルソースの一般セクション

このセクションでは、フラットファイル接続マネージャーが最初の列にとして名前を付け、DataTypeプロパティがに設定されてAdvancedいることに気付くでしょう。ただし、ファイル内の値は実際には日付です。データ型を手動で構成するか、ボタンをクリックすることができます。Column1string [DT_STR]Suggest Types...

高度な提案タイプ

[列タイプの提案]で、デフォルト値のままにして[ OK ]をクリックします。これにより、ファイルの最初の100行が読み取られ、ファイルで使用可能なデータに従って列タイプが決定されます。

列タイプを提案する

[列の種類の提案]ダイアログをクリックOKすると、フラットファイル接続マネージャーのデータ型がに変更されていることがわかります。[ OK]をクリックして、フラットファイル接続マネージャーを構成します。要件に応じて列の名前を変更することもできます(たとえば、InvoiceDateOrderDateなど)。Column 0date [DT_Date]

データ型が変更されました

フラットファイル接続マネージャーが構成されたので、データフロータスク内のフラットファイルソース内でそれを使用して、データを読み取り、データベースにデータを入力できます。したがって、派生列変換を使用して値を操作する必要はありません。

ただし、受信ファイルの値がのような文字列である場合120420 (YYMMDD)、これらの値を日付データ型として構成することはできません。これらのシナリオでは、この回答で提案されているように、派生列変換を使用する必要があります。

お役に立てば幸いです。

于 2012-04-21T15:57:15.783 に答える
1

着信値が文字列の場合20140106(YYYYMMDD)、()を使用してステートメントを型キャストするとDDT_DBDATE、エラーがスローされます。この問題が発生したので、型キャストを取り出しました。マッピングは次のようになりました。

(LEN(TRIM(SUBSTRING([Screening Date],1,8))) > 0 ? (SUBSTRING([Screening Date],1,4) + "/" + SUBSTRING([Screening Date],5,2) + "/" + SUBSTRING([Screening Date],7,2)) : NULL(DT_WSTR,5))

後で、データ変換トランスフォーメーションを追加し、それをデータベースのタイムスタンプに変更しました。また、date()と入力するように変更することもできますDT_DATE

ありがとう!

于 2014-06-20T22:18:18.910 に答える
0

次のことを試してください(私はこれを行うことに成功しました)

(LEN(TRIM(SUBSTRING(ReceivedDateTime,1,8))) > 0 ? (DT_DBDATE)(SUBSTRING(ReceivedDateTime,1,4) + "-" + SUBSTRING(ReceivedDateTime,5,2) + "-" + SUBSTRING(ReceivedDateTime,7,2)) : (DT_DBDATE)NULL(DT_WSTR,5))

ステートメントを(DT_DBDATE)で型キャストするだけです。また、その位置に日付がない場合、つまり、受信した文字列の位置1から8が空の場合、これはNULLになります。

于 2012-04-23T09:13:11.570 に答える