SQL Serverのデータインポートウィザードを使って日時データをインポートする
課題
SQL Serverインポートウィザードを使ってcsvのインポートを試みたところ、日時データでエラーが発生する。その理由を探った。(簡単だった)
実行
csv内の日時データのフォーマットは次の通り。
yyyy/mm/dd HH:MM:ss.fff
年月日はスラッシュで句切られ、時分秒はコロンで句切られている。また、年月日と時分秒の間は半角空白1つ。
上記のフォーマットの日時データを含む、例えば次のようなcsvをSQL Serverインポートウィザードを使ってインポートしようとすると、エラーが発生する。
Name,YMDHMS hoge,2015/10/15 21:00:00.000 fuga,2015/10/15 22:00:00.000 piyo,2015/10/15 23:00:00.000
エラー 0xc02020a1: データ フロー タスク 1: データ変換に失敗しました。列 "YMDHMS" のデータ変換から、状態値 2 と状態を示すテキスト "データが失われる可能性があるため、値を変換できませんでした。" が返されました。 (SQL Server インポートおよびエクスポート ウィザード)
このエラーはどうも日時データをインポートするときの日時データのフォーマットが異なるために起きているようだ。
(メッセージからはよくわからないのだが)
インポート時のフォーマットを確認する。
Integration Services Data Types
上記ページのConverting Between Strings and Date/Time Data Typesの項目を見ると、次のようなフォーマットでなければならないとのことだ(DT_DNTIMESTAMPの場合)。
yyyy-mm-dd hh:mm:ss[.fff]
さきほどのcsvファイルの日時データのフォーマットを上のフォーマットに直してもう一度SQL Serverインポートウィザードを使ってインポートすると成功する。
評価
CONVERT関数やCAST関数はスラッシュ形式の日時データだって変換できるのだが、SQL Serverインポートウィザードはフォーマットに正確に従わないといけない。
つまりはデータや資料をしっかり確認しましょうということですね。気をつけよう。