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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    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
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    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, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 actif
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    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
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    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, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 actif
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    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
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    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, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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