1

csv ファイルからテーブルに 100 万件以上のレコードをインポートしています。load data local infile メソッドを使用するとうまく機能します。

ただし、日付はすべて異なる形式です。簡単なグーグルでこの機能にたどり着きました:

STR_TO_DATE

ただし、それを実装すると、何も得られず、空の挿入が得られます。これは、1つの日付(同じ問題で4つありました)と一般的な列名を含むように削減された私のSQです。

load data local infile 'myfile.csv' into table `mytable`
fields terminated by '\t'
lines terminated by '\n'
IGNORE 1 LINES

( `column name 1`
, `my second column`
, @temp_date
, `final column`)

SET `Get Date` = STR_TO_DATE(@temp_date, '%c/%e/%Y')

私が行った場合:

SET `Get Date` = @temp_date

csv からの日付は、ファイル内の形式でキャプチャされます。ただし、最初の方法を試すと、テーブルの列が空になります。列タイプを varchar (255) に変更し、タイムスタンプからキャプチャーに変更しましたが、最終的には ymd H:i:s をキャプチャーしたいと思います (STR_TO_DATE でそれができるかどうかわかりませんか?)

また、@ 記号が必要な理由についてもわかりません.. グーグルはそこで失敗しました。

だから、私の質問は次のとおりです。

  1. この関数を使用するのに @ 記号が必要なのはなぜですか?
  2. データ形式 ('%c/%e/%Y') は、入力データまたは目的の出力の形式である必要がありますか?
  3. この方法でも時間をキャプチャできますか?

大きな投稿でごめんなさい!

とりあえずGoogleに戻る...

4

2 に答える 2

2

この関数を使用するのに @ 記号が必要なのはなぜですか?

@ 記号は、変数を使用していることを意味するため、読み取った文字列はすぐにテーブルに置かれるのではなく、挿入する前に操作できるようにするメモリ pic に入れられます。http://dev.mysql.com/doc/refman/5.0/en/user-variables.htmlの詳細情報

データ形式 ('%c/%e/%Y') は、入力データまたは目的の出力の形式である必要がありますか?

入力されたデータの形式、詳細はhttp://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-dateにあります

この方法でも時間をキャプチャできますか?

次のような正しい形式を選択している限り、できるはずです

STR_TO_DATE(@temp_date,'%c/%e/%Y %h:%i:%s');
于 2012-07-28T01:47:21.607 に答える