So laden Sie Datumsdaten mit LOAD DATA in MySQL
P粉738046172
P粉738046172 2023-08-22 22:12:49
0
1
532
<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粉738046172
P粉738046172

Antworte allen(1)
P粉852578075

您的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)
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage