17

MySQLのLOADDATALOCAL INFILE SQLステートメントを使用して、CSVファイルから既存のデータベーステーブルにデータをロードしています。

SQLステートメントの例を次に示します。

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(name, address, dateOfBirth)

dateOfBirthフィールドにマップされるCSVの3番目の列には、現在、次の形式の日付があります。

14-Feb-10

上記のSQLステートメントを変更して、日付をMySQLの日付形式にフォーマットするにはどうすればよい2010-02-14ですか?

以下を使用して通常のINSERT構文を使用するときに文字列の日付を変換する方法を知っています。

STR_TO_DATE('14-Feb-10', '%d-%b-%y')

4

2 に答える 2

26

SETその列の行の内容を参照するには、変数とともに句を使用する必要があります。列リストで、日付列を変数名に割り当てます。SETその後、ステートメントで使用できます。(注:これをテストするためのMySQLが目の前にありません。)

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(name, address, @var1)
set dateOfBirth = STR_TO_DATE(@var1, '%d-%b-%y')

次のページの例を参照してください:http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/load-data.html(このページがのメインドキュメントと異なるように見える理由はわかりません実際にSET使用例が含まれていること。)

于 2010-02-10T17:52:13.043 に答える
5

テストの柔軟性を少し高める、もう少し長いプロセス:

  • たとえば、呼び出されるVARCHAR(64)列を使用します。mydate_textは、インポートするフォーマットされていない日付を保持します。
  • このプレーンテキストフィールドに日付を入力してテーブルをロード/インポートします
  • 次のようなクエリを実行します

    UPDATE mytable SET mydate = STR_TO_DATE(mydate_text、'%Y-%b-%d')

  • すべて問題ないように見える場合は、mydate_text列を削除してください

  • 問題がない場合は、新しい形式で再試行してください。

この手法の利点は、特に長さのテーブル列で、やや面倒なMySQL LOAD DATA構文を使用してテーブルを再インポートすることなく、フォーマットを試すことができることです。自分が何をしているのかを正確に知っている場合は、上記の答えが最適です。MySQLの専門家でない場合は、フォーマットを正確に取得するまで、この手法が役立ちます。

于 2011-09-19T13:16:43.273 に答える