6

.csv ファイルから日時の値をインポートしようとして、壁に頭をぶつけていました。

インポートステートメントは次のとおりです。

LOAD DATA LOCAL INFILE 'myData.csv' INTO TABLE equity_last_import FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (equity,last,@last_date) SET last_date = STR_TO_DATE( @last_date, '%Y-%m-%d %H:%i:%s')

データのサンプルを次に示します。

4108,48.74,"2013-09-16 16:15:04"
4249,8.1,"2013-09-16 16:15:04"
4197,3.81,"2013-09-16 17:20:00"
4139,26.81,"2013-09-16 16:15:04"
4218,24.83,"2013-09-16 17:20:00"
4260,79.72,"2013-09-16 16:15:04"
4270,450.12,"2013-09-16 17:20:00"
4242,30.38,"2013-09-16 16:15:04"
4193,1.42,"2013-09-16 16:15:04"
4134,3.77,"2013-09-16 16:15:04"

を使用して日付値をインポートできますが、インポートSTR_TO_DATE()する日時値を取得できません。「%Y-%m-%d %H:%i:%s」以外のいくつかの異なる日付形式を試してみましたが、常に null 日時 [0000-00-00 00:00:00] が返されます。STR_TO_DATE()文字列はデフォルトのMySQL日時形式であるため、使用しないことも試しました。

どんな助けでも大歓迎です。

4

4 に答える 4

17

私は同じ問題に遭遇しました。CSV ファイルの日付列の形式を変更して、MySQL の日時形式と一致するように修正しました。

  1. CSV を Excel で開きます。
  2. 列を強調表示します。
  3. 列を右クリックします。
  4. をクリックしFormat Cellsます。
  5. ピックしCustomます。
  6. フィールドで使用yyyy/mm/dd hh:mm:ssTypeます。
  7. クリックok

上記のように日時形式を変更した後、CSV は正常にインポートされました。

于 2016-06-06T18:57:51.787 に答える
17

データ ファイルの日付は、MySQL がネイティブに理解できる形式になっています。二重引用符で囲まれているだけです。引用符を処理する方法を伝える必要がありLOAD DATA INFILEます。次のようなことを試してください:

LOAD DATA LOCAL INFILE 'myData.csv'
INTO TABLE equity_last_import
FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ','
LINES TERMINATED BY '\n'
(equity,last,last_date)

アップデート:

動かないとおっしゃっていたので、テストテーブルを作って動作確認しました。証拠は次のとおりです。

質問の csv データを強調表示myData.csvし、システムの/tmpフォルダーにある新しいファイルに貼り付けました。次に、mysql コンソールに接続し、testデータベースに切り替えて、次のコマンドを実行しました。

mysql> create table equity_last_import (equity int, last decimal(10,2), last_date datetime) engine=innodb;
Query OK, 0 rows affected (0.02 sec)

mysql> LOAD DATA LOCAL INFILE '/tmp/myData.csv'
    -> INTO TABLE equity_last_import
    -> FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ','
    -> LINES TERMINATED BY '\n'
    -> (equity,last,last_date);
Query OK, 10 rows affected (0.00 sec)
Records: 10  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from equity_last_import;
+--------+--------+---------------------+
| equity | last   | last_date           |
+--------+--------+---------------------+
|   4108 |  48.74 | 2013-09-16 16:15:04 |
|   4249 |   8.10 | 2013-09-16 16:15:04 |
|   4197 |   3.81 | 2013-09-16 17:20:00 |
|   4139 |  26.81 | 2013-09-16 16:15:04 |
|   4218 |  24.83 | 2013-09-16 17:20:00 |
|   4260 |  79.72 | 2013-09-16 16:15:04 |
|   4270 | 450.12 | 2013-09-16 17:20:00 |
|   4242 |  30.38 | 2013-09-16 16:15:04 |
|   4193 |   1.42 | 2013-09-16 16:15:04 |
|   4134 |   3.77 | 2013-09-16 16:15:04 |
+--------+--------+---------------------+
10 rows in set (0.00 sec)

見る?それは完全に機能します。

別の更新:

現在、次のエラーが発生していることを指定しました。

Out of range value for column 'last_date' at row 1

CSV ファイルにヘッダーはありますか? その場合、コマンドに追加IGNORE 1 LINESして、LOAD DATA INFILEMySQL にヘッダーをスキップするように指示することができます。

于 2013-09-16T22:00:44.370 に答える