1

「LOAD DATA LOCAL INFILE」クエリを使用して、.csv ファイルから Mysql db にデータをインポートしています。.csv には以下が含まれます。

ID | Name | Date | Price

 1. 01 | abc  | 13-02-2013 | 1500
 2. 02 | nbd  | blahblahbl | 1000
 3. 03 | kgj  | 11-02-2012 | jghj

My Mysql テーブルには次の列が含まれています。

Id INTEGER 
NAME Varchat(100)
InsertionTimeStamp Date
Price INTEGER 

上記のテーブルに .csv データをロードする MySQL クエリ:

LOAD DATA LOCAL INFILE 'UserDetails.csv' INTO TABLE userdetails
FIELDS TERMINATED BY ','
IGNORE 1 LINES
 (Id,Name,InsertionTimeStamp,Price)
 set InsertionTimeStamp = str_to_date(@d,'%d-%m-%Y');

クエリを実行すると、3 つのレコードがテーブルに挿入され、2 つの警告が表示されました

a) Incorrect datetime value : 'blahblahbl' for function str_to_date
b) Data truncate at row 3 (because of invalid INTEGER for Price column)

質問

1. Is there any way to avoid data being inserted in table which shows warnings/errors or the row which has invalid data 

I dont want Row 2 & Row 3 to be inserted as it contains invalid data

2. For WARNING of Incorrect datetime value above, can I get the row no also?
Basically I want to get exact warning/error with the row number.
4

3 に答える 3

0

dbForge Studio for MySQLでデータ インポートツール (CSV または TXT インポート形式) を試すことができます。ウィザードのページでオプションのチェックを外し、ページチェックオプションで、インポート エラーをスキップするのに役立ちます。Data ImportModesUse bulk insertErrors handlingIgnore all errors

于 2013-02-13T14:38:42.630 に答える
0

入力を他の言語(phpなど)で検証すると、もっと簡単になると思います。csv の行を反復処理して、thisthis 、およびthisのようなものを呼び出すだけです。

SQLをいじる必要があるだけなら、これが役立つかもしれません!

于 2013-02-13T11:24:20.657 に答える
0

問題のある行をスキップしようとしていることは知っていますが、LOAD DATA コマンドに誤りがあると思いませんか? それは次のとおりです。

LOAD DATA LOCAL INFILE 'UserDetails.csv' INTO TABLE userdetails
FIELDS TERMINATED BY ','
IGNORE 1 LINES
(Id,Name,@d,Price)
set InsertionTimeStamp = str_to_date(@d,'%d-%m-%Y');

列の実際の名前 (InsertionTimeStamp) ではなく、列のリストで変数名 (d) を使用するべきではありませんか? これが、datetime に関するエラー メッセージが表示される理由である可能性があります。

于 2013-09-25T01:39:31.193 に答える