Heim  >  Fragen und Antworten  >  Hauptteil

So laden Sie Datumsdaten mit LOAD DATA in MySQL

<p>Das Standarddatumsformat für eine Datumsspalte in MySQL ist <code>JJJJ-MM-TT HH:MM:SS</code>. </p> <p>Die Datendatei, die ich laden möchte, enthält ein Datumsfeld im Format <code>TT-MON-JJ HH:MM:SS</code>. Wenn ich diese Datei mit dem Befehl <code>LOAD DATA</code> lade, gerät die Datenbank durcheinander und setzt alle Datumseinträge auf <code>00:00:00</code> </p> <p>Dies ist mein Test mit der Option <code>STR_TO_DATE</code>, aber er funktioniert nicht.</p> <p><strong>测试文件(test_temp.csv)</strong></p> <pre class="brush:php;toolbar:false;">c1, c2 07.06.12 22:50:19, „abc“ 07.06.13 22:50:19, „bcd“</pre> <p><strong>测试表(temp_test)</strong></p> <pre class="brush:php;toolbar:false;">describe temp_test; +-------+-------------+------+-----+---------+---- ---+ | Feld | Geben Sie | ein Null | Schlüssel | Standard | Extra | +-------+-------------+------+-----+---------+---- ---+ | c1 | Datum/Uhrzeit | JA | | NULL | | | c2 | varchar(10) | JA | | NULL | | +-------+-------------+------+-----+---------+---- ---+</pre> <p><strong>数据加载命令:</strong></p> <pre class="brush:php;toolbar:false;">Daten laden Infile '/var/lib/mysql/DataSet-1/temp_test.csv' ignorieren in die Tabelle temp_test Felder, die mit „,“ abgeschlossen sind umschlossen '"' Zeilen, die mit „rn“ abgeschlossen sind Ignoriere 1 Zeile (@var_c1,c2) set c1 = STR_TO_DATE(@var_c1,'%d-%b-%y %h:%i:%s');</pre> <p><strong>输出</strong></p> <pre class="brush:php;toolbar:false;">Abfrage OK, 2 Zeilen betroffen, 2 Warnungen (0,00 Sek.) Datensätze: 2 Gelöscht: 0 Übersprungen: 0 Warnungen: 0 MySQL> Warnungen anzeigen; +-------+------+---------------------------------- -------------------------+ | Ebene | Code | Nachricht | +-------+------+---------------------------------- -------------------------+ | Fehler | 1411 | Falscher Datum/Uhrzeit-Wert: „07-JUN-12 22:50:19“ für Funktion str_to_date | | Fehler | 1411 | Falscher Datum/Uhrzeit-Wert: „07-JUN-13 22:50:19“ für Funktion str_to_date | +-------+------+---------------------------------- -------------------------+ MySQL> wähle * aus temp_test; +------+------+ | c1 | c2 | +------+------+ | NULL | abc | | NULL | bcd | +------+------+</pre> <p>问题出在:</p> <ol> <li>输入日期列(应该是<code>07-JUN-12</code>还是<code>07-Jun-12</code>)或</li> <li>我的格式字符串(<code>%d-%b-%y</code>)或</li> <li>其他原因?</li> </ol><p><br /></p>
P粉738046172P粉738046172424 Tage vor486

Antworte allen(1)Ich werde antworten

  • P粉852578075

    P粉8525780752023-08-23 09:28:32

    您的STR_TO_DATE()的格式字符串无效。您的样本数据中的小时使用24小时制(%H%k),而不是12小时制(%h)。您可以在这里查看所有可能的日期格式说明符。

    %d-%b-%y %h:%i:%s

    修改为

    %d-%b-%y %H:%i:%s
             ^^

    您的语句可能如下所示

    LOAD DATA INFILE '/path/to/temp_test.csv'
    IGNORE INTO TABLE temp_test
      FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
      LINES TERMINATED BY '\r\n' -- or '\n'
      IGNORE 1 LINES
    (@c1, c2)
    SET c1 = STR_TO_DATE(@c1,'%d-%b-%y %H:%i:%s');

    使用您的样本数据加载后

    mysql> select * from temp_test;
    +---------------------+------+
    | c1                  | c2   |
    +---------------------+------+
    | 2012-06-07 22:50:19 | abc  |
    | 2013-06-07 22:50:19 | bcd  |
    +---------------------+------+
    2 rows in set (0.00 sec)
    

    Antwort
    0
  • StornierenAntwort