LoginSignup
0
0

More than 3 years have passed since last update.

SQL Serverのデータインポートウィザードを使って日時データをインポートする

Posted at

一人アドカレ

ポスト
1 一時テーブルが存在していたら削除する
2 何度も使う中間テーブルに名前をつけてクエリを見やすくする
3 共通テーブル式と一時テーブルの参照可能な範囲の違い
4 グループ毎に最大値や最小値を持つレコードを抽出する
5
6 SQL Serverのデータインポートウィザードを使って日時データをインポートする
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

SQL Serverのデータインポートウィザードを使って日時データをインポートする

この記事は自身のブログを書き直したものです。

課題

SQL Serverインポートウィザードを使ってcsvのインポートを試みたところ、日時データでエラーが発生する。インポートを試みたcsvの日時データのフォーマットは次の通り。

yyyy/mm/dd HH:MM:ss.fff

年月日はスラッシュで句切られ、時分秒はコロンで句切られている。また、年月日と時分秒の間は半角空白1つ。

上記のフォーマットの日時データを含むcsvをSQL Serverインポートウィザードを使ってインポートしようとすると、エラーが発生する。

エラー 0xc02020a1: データ フロー タスク 1: データ変換に失敗しました。列 "YMDHMS" のデータ変換から、状態値 2 と状態を示すテキスト "データが失われる可能性があるため、値を変換できませんでした。" が返されました。
(SQL Server インポートおよびエクスポート ウィザード)

準備

実行環境

  • SQL Server 2017 Standard
  • SQL Server Management Studio 2017

サンプルデータ

データを挿入するためのテーブル

CREATE TABLE [target_tbl] (
       [name]           VARCHAR(5) NOT NULL
     , [some_date_time] DATETIME   NOT NULL );

INSERT INTO [target_tbl] ( [name], [some_date_time] )
VALUES ( 'taro', '1999/10/11 10:20:30' );
name some_date_time
taro 1999-10-11 10:20:30

テーブルに挿入するデータ

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

解法

エラーはどうも日時データをインポートするときの日時データのフォーマットが異なるために起きているようだ(メッセージからはよくわからないのだが)。

インポート時のフォーマットを確認する。

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インポートウィザードはフォーマットに正確に従わないといけない。

つまりはデータや資料をしっかり確認しましょうということですね。気をつけよう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0