MySQLのLOADDATA LOCAL 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')
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
の使用例が含まれているという点で、メインのドキュメントとは異なります。)
テストの柔軟性を少し高める、もう少し長いプロセス:
次のようなクエリを実行します
UPDATE mytable SET mydate = STR_TO_DATE(mydate_text、 '%Y-%b-%d')
すべて問題ないように見える場合は、mydate_text列を削除してください
この手法の利点は、特に長さのテーブル列で、やや面倒なMySQL LOAD DATA構文を使用してテーブルを再インポートすることなく、フォーマットを試すことができることです。自分が何をしているのかを正確に知っている場合は、上記の答えが最適です。 MySQLの専門家でない場合は、フォーマットを正確に取得するまで、この手法が役立ちます。