recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment charger des données de date en utilisant LOAD DATA dans MySQL

<p>Le format de date par défaut pour une colonne de date dans MySQL est <code>AAAA-MM-JJ HH:MM:SS</code>. </p> <p>Le fichier de données que j'essaie de charger comporte un champ de date au format <code>DD-MON-YY HH:MM:SS</code>. Lorsque je charge ce fichier à l'aide de la commande <code>LOAD DATA</code>, la base de données est confuse et définit toutes les entrées de date sur <code>0000-00-00 00:00:00</code> </p> <p>C'est mon test utilisant l'option <code>STR_TO_DATE</code> mais cela ne fonctionne pas.</p> <p><strong>测试文件(test_temp.csv)</strong></p> <pre class="brush:php;toolbar:false;">c1, c2 07 JUIN 12 22:50:19, "abc" 07-JUN-13 22:50:19, "bcd"</pre> <p><strong>测试表(temp_test)</strong></p> <pre class="brush:php;toolbar:false;">décrire temp_test; +-------+--------+------+-----+---------+---- ---+ | Champ | Tapez | Nulle | Clé | Par défaut | Supplémentaire | +-------+--------+------+-----+---------+---- ---+ | c1 | dateheure | OUI | | NULL | | | c2 | varchar(10) | OUI | | NULL | | +-------+--------+------+-----+---------+---- ---+≪/pré> <p><strong>数据加载命令:</strong></p> <pre class="brush:php;toolbar:false;">charger les données fichier '/var/lib/mysql/DataSet-1/temp_test.csv' ignorer dans la table temp_test champs terminés par ',' enfermé par '"' lignes terminées par 'rn' ignorer 1 ligne (@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;">Requête OK, 2 lignes affectées, 2 avertissements (0,00 sec) Enregistrements : 2 Supprimés : 0 Ignorés : 0 Avertissements : 0 MySQL> afficher des avertissements ; +-------+------+---------------------------------- ---------------------------------------+ | Niveau | Codes | Messages | +-------+------+---------------------------------- ---------------------------------------+ | Erreur | 1411 | Valeur datetime incorrecte : '07-JUN-12 22:50:19' pour la fonction str_to_date | | Erreur | 1411 | Valeur datetime incorrecte : '07-JUN-13 22:50:19' pour la fonction str_to_date | +-------+------+---------------------------------- ---------------------------------------+ MySQL> sélectionnez * dans temp_test ; +------+------+ | c1 | c2 | +------+------+ | NULL | abc | | NULL | bcd | +------+------+</pré> <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粉738046172466 Il y a quelques jours520

répondre à tous(1)je répondrai

  • P粉852578075

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

    le vôtreSTR_TO_DATE()的格式字符串无效。您的样本数据中的小时使用24小时制(%H%k),而不是12小时制(%h). Vous pouvez voir tous les spécificateurs de format de date possibles ici.

    volonté

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

    a été modifié en

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

    Votre déclaration pourrait ressembler à ceci

    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');

    Après le chargement de vos exemples de données

    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)
    

    répondre
    0
  • Annulerrépondre