2017-05-31 17 views
3

私は50の列を持つソースファイルを持っています。列の1つがTransDateTimeで、値が22-MAY-2017 02:31:15.00の形式です。今、このソースファイルを最終的な宛先テーブルにロードする前に、そのカラムにデータタイプdatetimeを使用できるように、フォーマットを22-05-2017 02:31:15.00に変換します。SSISで月の名前を月の番号に変更

月の値を月の値に変換する方法を見てきました。

私は、私の場合には、このシナリオを回避する方法がわからないです。どんな解決策ですか?

+0

(例のように)SSISを使用していますか?または、クエリを使用して方法を探していますか? –

+0

私はssisデータフロータスクを使用しています –

+0

私はこれを行います:ソースデータをSSISを使用してステージングテーブルrawにプッシュします。次に、(CHARINDEXを使用して)2つのダッシュの間のすべての日付を解析して、それに相当する数値で置き換えてから日付を再フォーマットするクエリを作成します。実行SQLタスクとして実行します。最後に、ステージングテーブルから宛先にデータをプッシュします。 –

答えて

2

もう1つの解決策は、置換することです。 "MAY"を "05"に置き換えるだけで、サンプル入力から目的の結果が得られます。

ネスト12は1つの式で機能し、すべてのシナリオを処理します。

2

スクリプトコンポーネントを使用します。 C#でこのようなご希望のフォーマットに入力列を変換する:あなたの入力欄がMyDateに該当し、アウトが列を入れている場合、例えば、

DateTime.Parse("22-MAY-2017 02:31:15.00").ToString("dd-MM-yyyy HH:mm:ss.ff"); 

その後、OutPutColです:

OutPutCol = DateTime.Parse(Row.MyDate).ToString("dd-MM-yyyy HH:mm:ss.ff"); 

することができますcheck the code here

1

宛先カラムのデータ型がdatetimeの場合は、日付文字列を再フォーマットする予定はありません。この文字列を日付値に変換しようとしています。

DT_DBTIMESTAMPの出力列とTransDateTime列を入力として、データフロータスクにScript COmponentを追加できます。そして、次のコードを使用します。(私はVB.NETを使用)

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Output0Buffer) 

    Row.OutDate = DateTime.ParseExact(Row.TransDateTime,"dd-MMM-yyyy HH:mm:ss.ff",New System.Globalization.CultureInfo("en-GB")) 

End Sub 

あなたの先の列はString型であるならば、あなたは、同じ手順を実行する必要がありますが、出力列がタイプDT_STRである必要があり、あなたが持っています

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Output0Buffer) 

    Row.OutDate = DateTime.ParseExact(Row.TransDateTime,"dd-MMM-yyyy HH:mm:ss.ff",New System.Globalization.CultureInfo("en-GB")).ToString("dd-MM-yyyy HH:mm:ss.ff") 

End Sub 
関連する問題