2

csv ファイルをデータベースにインポートしたい

ヘッダー ID、名前、姓、日付 1、日付 2

データ 10001、ボブ、ロバーツ、2007 年 3 月 6 日 15:18:25.10、2007 年 3 月 6 日 15:18:29.19

このファイルには何百万もの行があり、インポートするために次のコマンドを使用しました。

mysqlimport  --ignore-lines=1 --fields-terminated-by=, --columns='id,name,surname,date1,date2' --local -u root -p Database /home/server/Desktop/data.csv 

私の問題は、ファイルの日付をインポートしようとすると、適切に保存されず、次のようになることです。

'0000-00-00 00:00:00'

私は多くのことを試しましたが、何もうまくいきません。問題は、時間がミリ秒であり、文字列の末尾にコロンではなくドットがあるという事実によって引き起こされると思います。

私の日付はタイムスタンプ変数に保存されます

助けてください

ありがとう

4

3 に答える 3

2

日付が MySql 標準形式 (「YYYY-mm-dd HH:MM:SS」) ではありません。

mysqlimport は、"LOAD DATA" コマンド (mysqlimport ユーティリティで使用される) を使用している場合と同様に、コマンド ライン パラメーター間で日付変換関数を受け入れることができるはずですが、現時点ではそうではありません。

http://bugs.mysql.com/bug.php?id=55666

これを回避するには、次の方法があります。

http://blog.dgaspar.com/2010/08/01/the-set-clause/

この変換を 1 つのステップで実行したいが、その回避策を使用したくない場合は、「LOAD DATA」コマンドを直接使用する必要があります。

load data infile '/tmp/xxx.dat' 
into table xxx 
fields terminated by '|' 
lines terminated by '\n' 
(col1, 
col2, 
@col3, 
@col4, 
col5) 
set 
col3 = str_to_date(@col3, '%m/%d/%Y'), 
col4 = str_to_date(@col4, '%d/%m/%Y')

このコードはhttp://dev.mysql.com/doc/refman/5.1/en/load-data.html#c8828から入手しました。

于 2014-09-01T17:16:52.457 に答える
1

すべての列が文字列であるステージング テーブルにデータをインポートすることをお勧めします (たとえばvarchar(255).次に、MySQL で最終的な形式に型変換を行います。これにより、コードのデバッグがはるかに簡単になり、正確な必要な変換。

str_to_date()を使用して変換を行うことができます。

于 2014-09-01T17:09:15.333 に答える
0

私はこの問題を少し試しましたが、日付を awk スクリプトで変換し、mysql をミリ秒をサポートするバージョン 5.6 にアップグレードして解決しました。

とにかくありがとう

于 2014-09-03T09:34:12.457 に答える