IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Conversion Varchar en datetime


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut Conversion Varchar en datetime
    Bonjour à tous !

    Voila j'ai un petit problème.
    J'ai crée une base de donnée MySQL qui contient un certain type de donnée dont une date et une heure sous le format :

    dd/mm/yy hh:mm:ss:ms

    ex. :

    30/12/11 17:33:04:24
    25/08/11 05:32:25:58
    30/01/12 01:07:05:25

    Ces donnée sont stocké dans ma table "table_temporaire_code_defaut"
    et les date/heure dans une colonne nommée "Date_heure".

    J'ai du "déclarer" cette colonne au format Varchar car le format Datetime n'est pas pris en compte sous ce format-çi.

    Sachant que je souhaite convertir toute cette colonne au format Datetime (pour pouvoir trié dans l'ordre chronologique mes données), j'ai pensé a faire une conversion du format "manuellement" comme j'ai pu trouver sur d'autres sujet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResultSet selection_donnee = instruction.executeQuery("SELECT STR_TO_DATE('25/10/2006 14:27:39', '%d/%m/%Y %T')");
    Mais malhereusement, je n'arrive pas a utiliser cette fonction afin de réafficher la date au bon format.

    De plus, je ne voit pas comment étendre cette conversion à toute la table.

    Voiçi le code que j'ai essayé de réaliser :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    try{
     
         Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/mabase","root","mysql");
     
     
     
     
     
         File f=new File("C:\\\\Documents and Settings\\7701646E\\Bureau\\2012");
         s=f.getAbsolutePath();
         System.out.println(f.getPath());
         String[] liste=f.list();
         for (int i=0; i<liste.length; i++) {
         File ff=new File(liste[i]);
         if (ff.isDirectory()) System.out.println("Dossier \t"+liste[i]);
         else System.out.println(""+ff.length()+" \t"+liste[i]);
     
         }
     
     
     
         Statement instruction = connexion.createStatement();
     
         ResultSet resultat = instruction.executeQuery("SELECT * FROM type_code");
     
         while(resultat.next())
         {
             System.out.println("---------------------------");
             System.out.println("CODE: "+resultat.getString("CODE"));
             System.out.println("LIBELLE: "+resultat.getString("LIBELLE"));
         }
     
     
              for (int i=0; i<liste.length; i++) 
         {
      	   ResultSet donneefichier3 = instruction.executeQuery("LOAD DATA LOCAL INFILE 'C:\\\\Documents and Settings\\\\7701646E\\\\Bureau\\\\2012"+"\\\\"+liste[i]+"' INTO TABLE table_temporaire_code_defaut FIELDS TERMINATED BY ';'LINES TERMINATED BY '\n' IGNORE 1 LINES ");
         }
     
     
    //ResultSet selection_donnee = instruction.executeQuery("SELECT * FROM table_temporaire_code_defaut  ORDER BY Date_heure");
     
     
     
         ResultSet selection_donnee = instruction.executeQuery("SELECT STR_TO_DATE('25/10/2006 14:27:39', '%d/%m/%Y %T')");
     
     
     
     
         while(selection_donnee.next())
         {
             System.out.println("\n\n***---------------------------***");
             System.out.println("Index: "+selection_donnee.getString("Index"));
             System.out.println("Caisse: "+selection_donnee.getString("Caisse"));
             System.out.println("Code: "+selection_donnee.getString("Code"));
             System.out.println("Date_heure: "+selection_donnee.getString("Date_heure"));
         } 
              int effacement_donnee = instruction.executeUpdate("DELETE FROM table_temporaire_code_defaut");
     
     
         } 
     catch (Exception e)
      {
    	   e.printStackTrace();
       }
     }
    }
    J'ai pas mal cherché sur google, sur les forums et je n'ai rien trouvé qui puisse résoudre mon probleme.


  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ta requête de conversion est bonne.

    Si tu veux convertir dans la BDD, commence par créer une colonne de type DATETIME pour accueillir la date convertie. Pense bien à mettre cette colonne en DEFAULT NULL au cas où il y aurait des dates qui ne seraient pas exactement du format décrit et qui ne se convertiraient pas.
    Ensuite, exécute cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_temporaire_code_defaut
    SET nouvelle_date = STR_TO_DATE(Date_heure, '%d/%m/%Y %T')
    Puis vérifie que toutes les dates ont été converties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Date_heure -- autres colonnes éventuelles permettant de retrouver la date fautive
    FROM table_temporaire_code_defaut
    WHERE nouvelle_date IS NULL
    Si la requête renvoie des dates, convertis-les à la main.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse,

    J'ai donc essayé d'exécuter ta requete.
    J'ai donc essayé de créer une nouvelle colonne que j'ai nommé "Date_heure_convertie" à la fin de ma table.

    J'ai essayé de la parametrer en "DEFAULT NULL " malheuresement je me retrouve avec une erreur :

    requête SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE `table_temporaire_code_defaut` 
    CHANGE `Date_heure_convertie` `Date_heure_convertie` DATETIME NOT NULL DEFAULT NULL
    MySQL a répondu:

    #1067 - Valeur par défaut invalide pour 'Date_heure_convertie'
    J'ai donc quand meme essayé de créer cette colonne sans mettre "DEFAULT NULL " , ça a bien été pris en compte.

    Le soucis c'est que lorsque j'execute les requetes dans mon code java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int donnee1 = instruction.executeUpdate("UPDATE table_temporaire_code_defaut");
         ResultSet donnee2 = instruction.executeQuery("SET nouvelle_date = STR_TO_DATE(Date_heure, '%d/%m/%Y %T')") ;
    Je me retrouve effectivement avec ma colonne `Date_heure_convertie` qui est rempli mais avec des :

    0000-00-00 00:00:00
    0000-00-00 00:00:00
    0000-00-00 00:00:00

    Je ne voi pas d'ou pourrais bien venir le probleme.
    Si tu as une idée.



    Ps : Voiçi le format des fichiers que je suis censé traiter :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Index;Caisse;Code;Date et heure;Désignation;Localisation équipement;Colonne A;Colonne B;Colonne C;Vitesse;Distance parcourue;Code mission;Nuloc Fip0;Nuloc Fip1;Nuloc Fip2;Nuloc Fip3;Nuloc Fip4;Nuloc Fip5;Nuloc Fip6;Nuloc Fip7;Octets de contexte;Localisation véhicule;Affichage à droite;Affichage à gauche;Heure synchronisée avec ATESS;Code autorisation ouverture portes PCO (Z1 et Z5 uniquement);Code panto et maintien DJ PCO (Z1 uniquement);Code fermeture portes, éclairage et climatisation PCO (Z1 et Z5 uniqument);Etat frein;Mode EAS;MTSPCO;Médium RTD local voie A2 HS;Médium RTD local voie A1 H;Médium RTD local voie B1 H;Médium RTD local voie B2 H;Cabine accouplée;BL cabine locale;BL train actif;Présence PG
    1;L1 : 6521;3005;17/11/06 16:03:02:35;Urgence vue par le bloc PO;PO 1;;;;000;FFFF;----------;6521;6522;6529;6530;0000;0000;0000;0000;0B106104;11;0;0;1;0;0;0;1;0;0;0;1;1;0;0;0;1;0
    2;L1 : 6521;1006;17/11/06 16:04:20:20;Réseau train Inauguré;SIE 1;;;;000;FFFF;----------;0000;0000;0000;0000;0000;0000;0000;0000;0B106100;11;0;0;1;0;0;0;1;0;0;0;1;1;0;0;0;0;0
    3;L1 : 6521;1009;17/11/06 15:59:14:98;Heure ATESS reçue;SIE 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B106106;11;0;0;1;0;0;0;1;0;0;0;1;1;0;0;1;1;0
    4;L1 : 6521;3005;17/11/06 16:36:01:95;Urgence vue par le bloc PO;PO 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B006106;11;0;0;0;0;0;0;1;0;0;0;1;1;0;0;1;1;0
    5;L1 : 6521;3005;17/11/06 16:37:48:65;Urgence vue par le bloc PO;PO 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B006106;11;0;0;0;0;0;0;1;0;0;0;1;1;0;0;1;1;0
    6;L1 : 6521;3005;17/11/06 16:38:02:97;Urgence vue par le bloc PO;PO 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B006106;11;0;0;0;0;0;0;1;0;0;0;1;1;0;0;1;1;0
    7;L1 : 6521;1009;17/11/06 16:50:49:90;Heure ATESS reçue;SIE 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B116500;11;1;0;1;0;0;0;1;0;1;0;1;1;0;0;0;0;0
    8;L1 : 6521;3005;17/11/06 17:07:34:96;Urgence vue par le bloc PO;PO 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B116104;11;1;0;1;0;0;0;1;0;0;0;1;1;0;0;0;1;0
    9;L1 : 6521;3005;17/11/06 17:08:21:97;Urgence vue par le bloc PO;PO 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B116104;11;1;0;1;0;0;0;1;0;0;0;1;1;0;0;0;1;0
    10;L1 : 6521;3005;17/11/06 17:09:25:39;Urgence vue par le bloc PO;PO 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B116104;11;1;0;1;0;0;0;1;0;0;0;1;1;0;0;0;1;0
    11;L1 : 6521;1009;17/11/06 18:59:15:45;Heure ATESS reçue;SIE 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B106106;11;0;0;1;0;0;0;1;0;0;0;1;1;0;0;1;1;0
    12;L1 : 6521;3005;17/11/06 19:20:14:14;Urgence vue par le bloc PO;PO 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B006106;11;0;0;0;0;0;0;1;0;0;0;1;1;0;0;1;1;0
    13;L1 : 6521;1009;17/11/06 19:55:44:11;Heure ATESS reçue;SIE 1;;;;000;FFFF;----------;6521;6522;0000;0000;0000;0000;0000;0000;0B136500;11;1;1;1;0;0;0;1;0;1;0;1;1;0;0;0;0;0

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il n'y a pas quelque chose qui te choque là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int donnee1 = instruction.executeUpdate("UPDATE table_temporaire_code_defaut");
         ResultSet donnee2 = instruction.executeQuery("SET nouvelle_date = STR_TO_DATE(Date_heure, '%d/%m/%Y %T')") ;
    Une requête est un ensemble complet. Pourquoi coupes-tu la requête en deux ?

    Tu devrais récupérer une erreur avec ce code !

    Je me retrouve effectivement avec ma colonne `Date_heure_convertie` qui est rempli mais avec des :

    0000-00-00 00:00:00
    0000-00-00 00:00:00
    0000-00-00 00:00:00
    C'est pour ça qu'il fallait mettre la colonne à DEFAULT NULL car chez MySQL, la valeur par défaut d'une colonne de type DATETIME NOT NULL est '0000-00-00 00:00:00'.

    Autorise le NULL sur la colonne, remet le DEFAULT NULL et met à NULL toute la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ALTER TABLE table_temporaire_code_defaut
    CHANGE Date_heure_convertie Date_heure_convertie NULL DEFAULT NULL;
     
    UPDATE table_temporaire_code_defaut
    SET Date_heure_convertie = NULL;
    Ensuite ce code Java, si tu tiens absolument à le faire en Java, devrait passer pour la conversion des dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResultSet donnee2 = instruction.executeQuery("UPDATE table_temporaire_code_defaut SET nouvelle_date = STR_TO_DATE(Date_heure, '%d/%m/%Y %T')") ;
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    J'ai bien autorisé le NULL sur la colonne, remi le DEFAULT NULL et affecté à NULL toute la colonne.


    j'ai ensuite mis cette instruction dans mon code source java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int donnee2 = instruction.executeUpdate("UPDATE table_temporaire_code_defaut SET Date_heure_convertie = STR_TO_DATE(Date_heure, '%d/%m/%Y %T')") ;
    Mais malhereusement ça me laisse toute les valeurs de ma nouvelle colonne "Date_heure_convertie" à NULL : aucune conversion n'a été effectué . Je ne voit pas ce qui cloche. J'ai pourtant bien fait ce que tu m'a conseillé.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Pourquoi le faire en Java ? C'est une opération que tu dois faire régulièrement sur de nouvelles données importées ?

    Essaie la requête directement dans MySQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    J'ai essayé directement dans mySQL , ça me met une erreur :

    #1292 - Truncated incorrect datetime value: '11/05/11 11:23:01:21'

    Je fait cette requete SQL sur java car je doit dévellopper une application qui doit gérer des bases de données.

    La requete ne marche pas ni sur mysql , ni sur mon code java.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    J'ai testé via phpMyAdmin et la requête de conversion fonctionne.

    Tu as quelle version de MySQL ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Phpmyadmin 3.1.1

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et ton phpMyAdmin, il indique quel version de MySQL ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    j'ai l'impression que c'est phpMyAdmin Version: 3.1.1

    Tu pense que c'est à cause de quoi ?

    sinon j'ai fait cette manip' :

    ResultSet selection_donnee = instruction.executeQuery("SELECT * FROM table_temporaire_code_defaut ORDER BY SUBSTRING(Date_heure, 7, 2), SUBSTRING(Date_heure, 4, 2), SUBSTRING(Date_heure, 1, 2),SUBSTRING(Date_heure, 10, 2),SUBSTRING(Date_heure, 13, 2),SUBSTRING(Date_heure, 16, 2),SUBSTRING(Date_heure, 19, 2)");

    ça marche nickel mais bon je prefere quand meme les stocker
    au format date pour pouvoir manipuler les donnée plus rapidement.

    ps : Version du client MySQL: 5.0.51a

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    MySQL 5 ; je ne pense pas qu'il y ait une raison valable pour que la conversion ne fonctionne pas.

    Avec MySQL 5.5.15...

    Conversion d'une de tes dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT STR_TO_DATE('17/11/06 16:03:02:35', '%d/%m/%Y %T')
    => 2006-11-17 16:03:02

    Création d'une table de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE table_temporaire_code_defaut (
     Date_heure char(22) NOT NULL,
     Date_heure_convertie datetime DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    Insertion de dates issues de tes données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO table_temporaire_code_defaut(Date_heure)
    VALUES ('17/11/06 16:03:02:35'), ('17/11/06 16:04:20:20'), ('17/11/06 17:09:25:39')
    Nota : Il y a NULL dans toute la colonne Date_heure_convertie

    Conversion des dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_temporaire_code_defaut 
    SET Date_heure_convertie = STR_TO_DATE(Date_heure, '%d/%m/%Y %T')
    => Dans la colonne Date_heure_convertie :
    2006-11-17 16:03:02
    2006-11-17 16:04:20
    2006-11-17 17:09:25

    Maintenant, je revois le message d'erreur que tu as reçu :
    #1292 - Truncated incorrect datetime value: '11/05/11
    Effectivement, l'année n'y est pas sur 4 chiffres !
    Mais dans les données que j'ai insérées non plus et pourtant la conversion a fonctionné.
    Si toutes les années sont sur deux chiffres, essaie en changeant le schéma de conversion ('y' minuscule pour l'année sur 2 chiffres) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_temporaire_code_defaut 
    SET Date_heure_convertie = STR_TO_DATE(Date_heure, '%d/%m/%y %T')
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Merci encore pour ton aide.

    Alors, je vien de recréer une nouvelle base avec les manip' que tu m'a montré(peut-etre que j'ai mal crée mes colonnes etc..)

    Ensuite je teste les requetes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO table_temporaire_code_defaut(Date_heure)
    VALUES ('17/11/06 16:03:02:35'), ('17/11/06 16:04:20:20'), ('17/11/06 17:09:25:39')
    ensuite j'essai la conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_temporaire_code_defaut 
    SET Date_heure_convertie = STR_TO_DATE(Date_heure, '%d/%m/%Y %T')
    Toujours le meme probleme de troncature.

    J'essai donc avec le format '%d/%m/%y %T' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_temporaire_code_defaut 
    SET Date_heure_convertie = STR_TO_DATE(Date_heure, '%d/%m/%y %T')
    C'est le meme probleme de troncature.

    Je n'arrive pas a comprendre car lorsque je fait le test que tu m'a dit de convertir juste une date à la foix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT STR_TO_DATE('17/11/06 16:03:02:35', '%d/%m/%Y %T')
    Ca ne me renvoi aucune erreur.

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ensuite je teste les requetes :
    Tu testes via ton programme Java ou directement dans MySQL ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    directement dans mysql

  16. #16
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tu as passé exactement le code que j'ai donné au message #12 dans MySQL ?
    Et tu as un message d'erreur ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    oui.
    J'ai fait des imprimer écran pour montrer ce que j'obtient.


    Nom : resultat_requete2.GIF
Affichages : 1627
Taille : 51,2 Ko

    Nom : resultat_requete3.GIF
Affichages : 1571
Taille : 45,7 Ko

    Nom : resultat_requete4.GIF
Affichages : 1570
Taille : 35,6 Ko

    Nom : resultat_requete5.GIF
Affichages : 1523
Taille : 35,1 Ko

    Nom : resultat_final.GIF
Affichages : 1475
Taille : 59,7 Ko

  18. #18
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Bizarre !

    À tout hasard, je vois du blanc entre % et T dans tes requêtes UPDATE sur tes photos d'écrans. C'est un retour à la ligne automatique ou tu as vraiment laissé un blanc ? Il n'en faut bien sûr pas.

    Sinon, entre MySQL 5.0 et MySQL 5.5, il y a quand même pas mal de versions. Si tu peux mettre à jour ton MySQL, ce ne serait pas plus mal !

    À part ça, je ne comprends pas la cause du problème, surtout si un SELECT d'une seule date donne bien la conversion.

    Essaye quand même cette requête pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Date_heure, STR_TO_DATE(Date_heure, '%d/%m/%Y %T') AS Date_heure_convertie
    FROM table_temporaire_code_defaut
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Nickel !! C'était un soucis de version de MySQL effectivement !!!

    J'ai enfin réussi à faire des conversion.
    Merci encore pour ton aide précieuse.

    mais par contre encore une chose : ça me supprime les millième de seconde.

    J'aurais bien aimé les récupérer pour pouvoir les traiter.

  20. #20
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tu peux ajouter %f qui récupère les microsecondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT STR_TO_DATE('17/11/06 16:03:02:35', '%d/%m/%Y %T:%f')
    => 2006-11-17 16:03:02.350000
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [2012] Conversion varchar to datetime
    Par vinch999 dans le forum Développement
    Réponses: 4
    Dernier message: 04/11/2014, 15h10
  2. Erreur de conversion de type, varchar vers datetime
    Par Marc_3 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/06/2012, 21h46
  3. Réponses: 3
    Dernier message: 15/10/2010, 05h02
  4. Conversion VARCHAR vers INT
    Par Slash dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/05/2005, 10h43
  5. varchar en datetime
    Par divableue dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/10/2003, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo