0

この質問が以前に尋ねられたことは知っていますが、何らかの理由でまだ運がありません。CSV ファイルをインポートして、日付フィールドを適切な mysql 形式 (YYYY-MM-DD) に変換しようとしています。csv の一部のレコードには、日付値として空の値 '' があることに注意してください。それが何かを意味するかどうかはわかりません。また、私はすでにこの表に記録していることにも言及しておく必要があります。空ではありません。これを実行しようとしましたが、運がありませんでした

load data local infile '/Users/Path/To/CSV/file.csv' 
into table donor fields terminated by ',' 
lines terminated by '\n' (@date,INSTRUCTIONS)
set date = STR_TO_DATE(@date, '%Y-%m-%d')

それらすべてに対して NULL が返されます。何か案は?

4

2 に答える 2

1

これは正しいかもしれません-

LOAD DATA LOCAL INFILE '/Users/Path/To/CSV/file.csv'  
INTO TABLE tbl1 FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(@date,INSTRUCTIONS)
SET date = STR_TO_DATE(@date,'%Y/%m/%d);

なぜあなたは@date_date代わりに取ったの@dateですか?これは不完全な値と見なされて返されるため、これを取得していると思いますNULL。MySQLのドキュメントを参照してください。

于 2012-07-20T05:46:47.617 に答える
1

これを 1 回だけ実行し、最初にテーブルが空である場合は、インポートを実行できますが、最初にテーブルを変更して、日付列が VARCHAR 型になるようにします。次に を実行UPDATE table SET date = str_to_date( date, '%m/%d/%Y')し、列を DATETIME または DATE に戻します。

または、DATE 形式で 2 番目の日付列を追加し、VARCHAR 形式で最初の日付列にインポートしUPDATE table SET date2 = str_to_date( date1, '%m/%d/%Y')、varchar 列を実行してから削除することもできます。

STR_TO_DATE()の 2 番目のパラメーターは、結果の形式ではなく、入力された形式であることに注意してください。したがって、2 番目のパラメーターでは、CSV の日付形式が Ymd であることを MySQL に指示しています。実際に m/d/Y である場合は、「STR_TO_DATE(@date_date, '%m/%d/%Y)」を使用する必要があります。

お役に立てれば...

于 2012-07-20T04:21:39.357 に答える