3

インポートする必要のあるファイル(CSV)の日付フィールドは、SQLServerがDD-MMM-YYとしてインポートしている形式ですYY-MM-DD。したがって01-FEB-13、としてインポートされ2001-02-13ます。

SQLが日付のインポートに使用する形式を変更するにはどうすればよいですか?

元のOracleデータベースにアクセスできず、そこからエクスポートされたフラットファイルのみにアクセスできます。したがって、私が行うことはすべてSQLで行う必要があります。

4

2 に答える 2

4

SQL Serverがデフォルトで使用する日付形式を変更するには、Windowsサーバーのカルチャ設定をいじくり回す必要があります。特にこれがこの問題を抱えている唯一のファイルである場合は、お勧めできません

スクリプト変換と.NETFrameworkのDateTime.ParseExactメソッドを使用します。これにより、予想される形式を完全に制御できます。まず、CSVファイルの読み取りに使用しているフラットファイル接続マネージャーを構成して、DD-MMM-YY日付の列が、またはではなく、またはその他の日付固有のタイプに設定されるよう DataTypeにします。stringUnicode stringdatedatabase dateここに画像の説明を入力してください

データフローで、次のように、ソースコンポーネントと宛先コンポーネントの間にスクリプト変換を配置します。 ここに画像の説明を入力してください

スクリプト変換への入力として、各DD-MMM-YY日付列を選択します。 ここに画像の説明を入力してください

そして、各入力列 DataTypeに対応するのを使用して出力列を作成します。dateここに画像の説明を入力してください

スクリプト変換コードは次のようになります(C#を使用)

using System;
using System.Data;
using System.Globalization; // needed for CultureInfo.InvariantCulture
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    public override void IncomingRows_ProcessInputRow(IncomingRowsBuffer Row)
    {
        string incomingFormat = "dd-MMM-yy";
        Row.ConvertedCreateDate = DateTime.ParseExact(
            Row.CreateDate, 
            incomingFormat, 
            CultureInfo.InvariantCulture);
        Row.ConvertedLastUpdateDate = DateTime.ParseExact(
            Row.LastUpdateDate, 
            incomingFormat, 
            CultureInfo.InvariantCulture);
    }
}
于 2013-02-26T18:50:16.857 に答える
0

Oracleのto_char()関数を使用して、日付を希望の形式になるようにフォーマットできます。うまくいけば、テキストとして保存することについてのゴードンのコメントは、ステージングテーブルを参照していました。さまざまな理由から、最初のインポートはとにかくステージングテーブルに入れる必要があります。

于 2013-02-26T14:36:31.500 に答える