2011-10-26 21 views
3

私は現在、多数のCSVをMySQLデータベースにインポートしています。ファイルには、(例えば)形式である各レコードのタイムスタンプを、含まれていますMySQL CSVインポート - タイムスタンプがミリ秒の場合、0000-00-00 00:00:00と入力された日付?

2011-10-13 09:36:02.297000000 

私は日時フィールドの保存ミリ秒がサポートされていないことを示しているMySQLのバグ#8523、の認識しています。それにもかかわらず、私はブランクとして入力するのではなく、秒後にレコードを切り捨てるようにdatetimeフィールドを期待していました。 (CSVなどのフォーマットではなく)

は私が

2011-10-13 09:36:02 

輸入正しく以来、ミリ秒に問題を絞り込んています。

誰も私がこのデータをゼロなしでインポートする方法を提案できますか?私は手動でそれぞれに行き、タイムスタンプの長さ/フォーマットを調整するにはCSVが多すぎます。

ミリ秒は使いやすいものですが、私のアプリケーションには必要ではないことを指摘しておきます。私は簡単に数値を切り捨ててインポートすることができるソリューションに満足しています。

ありがとうございます!

編集:明確にするために、私は、次のコマンドを使用してCSVをインポートしています:

mysqlimport --fields-enclosed-by="" --fields-terminated-by="," --lines-terminated-by="\n" --columns=id,@x,Pair,Time -p --local gain [file].csv 

これは、レコードをインポートするための非常に高速である - 私はそうではありませんで、それぞれの行を読んで、インポートする50メートルの周りに持っています素晴らしい選択肢。

+0

CSVをどのようにインポートしていますか? –

+0

質問をインポートコマンドを含むように更新しました。 –

答えて

2

CSVをどのようにインポートしているのかわかりませんが、私がやる方法は、各ファイルを読み込み、タイムスタンプを秒単位でトリミングしてINSERT文を実行するスクリプト(php/perl)を書くことですデータベース。

<?php 
$file=fopen("your.csv","r"); 
mysql_connect ($ip, $user, $pass); 

while(!feof($file)) 
{ 
    $line = explode(',',fgets($file)); 
    mysql_query("INSERT INTO TABLE1 (ID, DATE) values (".$line[0].", ".substr($line[1],0,19).")"); 
} 
fclose($file); 
?> 

よう

何かが、コマンドラインからこれを実行し、それが仕事ミリ秒を使用する場合には、インポートされません

+0

私は次のようにMySQLImportコマンドを使用しています:mysqlimport -fields-enclosed-by = "" -fields-terminated-by = "、" --lines-terminated-by = "\ n" --columns = id、 @ x、ペア、時間-p - ローカルゲイン[ファイル] .csv。私は約50mのレコードをインポートするので、各行を読むことは本当にオプションではありません(mysqlimportは非常に高速です)。 –

+0

上記のようなスクリプトを試してみてください。文字列「2011-10-13 09:36:02.297000000」を最初の19文字(「2011-10-13 09:36:02」)に合わせる必要があります。 –

+0

私はすべてのCSVを一緒に猫にして、 'awk -F '、' '{print $ 1"、 "$ 2"、 "$ 3"、 "substr($ 4,0,19)"、 "$ 5" "$ 6} '2011octwk2.csv> TickPrices.csv' - これは完全に機能し、ほぼ50mのレコードで<10分かかりました。 –

0

を行う必要がありますが、それはせずにインポートを行います。ですから、あなたはある方法や別の方法で部分文字列にする必要があります。 MySQLには、SUBSTRINGなどのさまざまな文字列関数があります。これは、毎回まったく同じ位置でミリ秒単位でカットする必要があるためです。

ただし、これはクエリの実行時に使用します。クエリーを変更できない場合は、何らかの方法で自動化されているため、プロセスにステップを追加してデータを変更してから、データベースに追加することができます。シンプルなスクリプトは、csvを読み込み、変更したり、再度書き込んだり、クエリを直接実行することができます。

+0

上記のいくつかのコメントと私の編集によると、私は各レコードを読んでいない方法を見つけることを試みています。 –

関連する問題