7

TransactionID、などのいくつかの列で構成される入力テキストファイルがあります。列にはreceiveddt、次の形式の日付値があります。.txt 入力ファイルをデータベースにロードしたいのですが、宛先列のデータ型がです。以下に示すように、派生列変換を使用して、受信した receiveddt 列の値を datetime に変換しましたdescriptionrecieveddt120419 (yymmdd)recieveddtDateTime

Derived Column Name  Derived Column     Expression            Data Type 
-------------------  -----------------  --------------------  ---------
receiveddate         replace reciveddt  (DT_DATE)[reciveddt]  datetime 

さまざまな組み合わせを試しましたが、型キャストを実行しようとするとエラーが発生し続けます。

派生列変換を使用して文字列 (YYMMDD) を日時に変換するにはどうすればよいですか?

4

2 に答える 2

12

表現:

(DT_DATE)("20" + SUBSTRING([ReceivedDt], 1, 2) + "-" + SUBSTRING([ReceivedDt], 3, 2) + "-" + SUBSTRING([ReceivedDt], 5, 2))

読みやすさのために:

(DT_DATE)("20" + 
    SUBSTRING([ReceivedDt], 1, 2)  + "-" + 
    SUBSTRING([ReceivedDt], 3, 2)  + "-" +
    SUBSTRING([ReceivedDt], 5, 2))

問題の原因:

YYMMDD形式の文字列を有効な日付値に変換することはできません。上記の式を使用して、値の前に を付けて、値を日付に変換できる20形式に変換します。YYYYMMDD

上記の式を示す SSIS 2012 パッケージ:

OLE DB ソース派生列変換、および 2 つのマルチキャスト変換を使用して、データ フロー タスクを構成します。

データ フロー タスク

YYMMDD形式の値を持つ次のクエリを使用して、 OLE DB ソースを構成します。

SELECT  '120304' AS ReceivedDt UNION
SELECT  '120107' AS ReceivedDt UNION
SELECT  '121211' AS ReceivedDt UNION
SELECT  '121312' AS ReceivedDt;

派生列変換を構成して、列ReceivedDtの入力値をformatYYMMDDReceivedDateに変換しますYYYYMMDD

派生列の変換

派生列変換とマルチキャスト変換の間にデータ ビューアーを接続します。失敗コンポーネントではなく行をリダイレクトするようにエラー出力を構成します。

パッケージを実行すると、派生列変換と成功したマルチキャスト変換の間で有効な日付値に変換できる文字列値がデータ ビューアーに表示されます。

成功マルチキャスト変換

パッケージを実行すると、派生列変換とエラー マルチキャスト変換の間でデータ ビューアーに変換できなかった文字列値が表示されます。

エラー マルチキャスト変換

于 2012-04-20T09:48:13.550 に答える
3

これを試して:

(DT_DATE)("20" + SUBSTRING(receivedt,1,2) + "-" + SUBSTRING(receivedt,3,2) + "-" + SUBSTRING(receivedt,5,2))

この変換は、すべての日付が現在の世紀にあることを前提としていることに注意してください。前世紀の日付がある場合は、それを確認する条件を追加する必要があります。

また、派生列変換のエラー パスを定義して、誤った形式の日付を検出します。次に、たとえば、デフォルト値を与えることができます。

于 2012-04-20T09:48:00.430 に答える