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 :

Souci sur STR_TO_DATE


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut Souci sur STR_TO_DATE
    Bonjour,

    je n'arrive pas à comprendre où se trouve l'erreur concernant STR_TO_DATE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO outils (atelier,site,affectation,designation,constructeur,type,numserie,identification,debutdevalidite,etat,pas,findevalidite,verification,categorie,observation) VALUES('****','****','****','****','****','****','****','46136871',STR_TO_DATE('21-02-1989','%d-%m-%Y'),'****',10,STR_TO_DATE('21-02-1989','%d-%m-%Y'),'****','****','****');
    Code Erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '' for column 'debutDeValidite' at row 1
    Pourtant ors de la requête j'ai pas de souci:

    Nom : Capture.PNG
Affichages : 420
Taille : 2,7 Ko

    Bien à vous.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Data truncation: Incorrect date value: '' for column 'debutDeValidite'
    De quel type est la colonne debutDeValidite ?
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Merci de votre réponse.
    La colonne debutDeValidite est de type date.
    Elle acccepte seulement le format yyyy-mm-dd .

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Et si vous exécutez la requête directement dans MySQL, avez-vous la même erreur ?

    Pourrait-on voir le code applicatif qui génère l'erreur ?
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Bonsoir,

    Oui quand j’exécute ce code dans la console j'ai la même erreur.

    Malheureusement le code est au travail, je vais quand même tenter de vous le restituer:

    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
     
    public boolean addOutil(Outil unOutil)
    {
        Boolean ok = false;
     
       PreparedStatement pstmt = super().getConnexion.prepareStatement= ("INSERT INTO outils   (atelier,site,affectation,designation,constructeur,type,numserie,identification,debutdevalidite,etat,pas,findevalidite,verification,categorie,observation) VALUES('?','?','?','?','?','?','?','?',STR_TO_DATE('?','%d-%m-%Y'),'?',?,STR_TO_DATE('?','%d-%m-%Y'),'?','?','?'");
     
       pstmt.setString(1,unOutil.getAtelier().toString());
       pstmt.setString(2,unOutil.getSite().toString());
       pstmt.setString(3,unOutil.getAffectation().toString());
       pstmt.setString(4,unOutil.getDesignation().toString()); 
       pstmt.setString(5,unOutil.getConstructeur().toString());
       pstmt.setString(6,unOutil.getType().toString());
       pstmt.setString(7,unOutil.getNumSerie().toString());
       pstmt.setString(8,unOutil.getIdentification().toString());
       pstmt.setString(9,unOutil.getDebutDeValidite().toString());
       pstmt.setString(10,unOutil.getEtat().toString());
       pstmt.setInt(11,unOutil.getPas().toString());
       pstmt.setString(12,unOutil.getFinDeValidite().toString());
       pstmt.setString(13,unOutil.getVerification().toString());
       pstmt.setString(14,unOutil.getCategorie().toString());
       pstmt.setString(15,unOutil.getObservation().toString());
     
       if(pstm.executeUpdate() == 1)
       {
          ok = true;
       }
     
      // Je ferme la connexion.
     // Tout le bloc est entouré de try catch
    }

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Avez-vous vérifié que toutes les instructions de type unOutil.getAtelier().toString() valorisent correctement les paramètres attendus par la requête ?

    Sinon, pourquoi tout convertir en string alors que vous avez des valeurs en date et peut-être des numériques à fournir à la requête ?

    Enfin, je viens de voir trois trucs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PreparedStatement pstmt = super().getConnexion.prepareStatement= ("INSERT INTO outils   (atelier,site,affectation,designation,constructeur,type,numserie,identification,debutdevalidite,etat,pas,findevalidite,verification,categorie,observation) VALUES('?','?','?','?','?','?','?','?',STR_TO_DATE('?','%d-%m-%Y'),'?',?,STR_TO_DATE('?','%d-%m-%Y'),'?','?','?'");
    1) super().getConnexion.prepareStatement=Que vient faire ce = ?

    2) VALUES('?','?','?','Pourquoi entourer les ? qui marquent des paramètres à passer à la requête par des apostrophes ?
    Je pense que là vous attribuez la valeur ? à toutes les colonnes et que vous devriez carrément avoir une erreur (java ?) aux instructions pstmt.setString(1,unOutil.getAtelier().toString());.

    3) VALUES('?','?','?',' ... ?','?'");Il vous manque la parenthèse de fermeture de VALUES.

    En fait c'est même étonnant que vous ayez une erreur MySQL et pas une erreur de syntaxe de votre langage de programmation.
    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 !

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Bonjour,

    Je viens de remarquer quand écrivant ce bout de code hier soir j'ai fait beaucoup d'erreurs.

    La syntaxe de la requête concernant le super().getConnexion.prepareStatement=, les guillemets du VALUES, les ' ' qui entourent les ?,
    également pstmt.setInt(11,unOutil.getPas().toString()); ou le .toString() n'a rien à faire ici, sont des erreurs d'hier soir.

    Le code au travail ne les a pas.

    J'ai également bien vérifié que chaque instructions de type unOutil.getAtelier().toString() valorisent correctement les paramètres attendus par la requête.

    Ensuite, j'ai tout converti en String car je ne suis pas à l'aise avec les dates. Le seul format date est dans la BDD. Quand je SELECT[/ un outil, je convertie ses champs debutDeValidite et finDeValidite en String.

    Enfin, j'ai testé cette requête en mettant les accesseurs dans le INSERT directement sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VALUES("'"+unOutil.getAtelier().toString()+"'," ....
    et pour les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    STR_TO_DATE('"+unOutil.getDebutDeValidite().toString()+"','%d-%m-%Y')
    et j'ai la même erreur.

    Bien à vous.

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Mettez le texte de votre requête avec les accesseurs dans une variable et affichez la variable pour voir ce que ça donne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String sql = "INSERT INTO...";
    /* bout de programme qui affiche la variable sql */
    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 !

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Voici le contenu de la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO outils (atelier,site,affectation,designation,constructeur,type,numserie,identification,debutdevalidite,etat,pas,findevalidite,verification,categorie,observation) VALUES('****','****','****','****','****','****','****','4CF368A1',STR_TO_DATE('21-02-1989','%d-%m-%Y'),'****',10,STR_TO_DATE('21-02-1989','%d-%m-%Y'),'****','****','****')
    D'ailleurs quand je copie colle exactement les fonctions STR_TO_DATE dans la console elles fonctionnent.

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Et quand vous exécutez cette requête directement dans MySQL, ça fonctionne ?
    Je n'y vois pas d'erreur de syntaxe.
    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 !

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Bonjour,

    Oui en effet j'ai la même erreur quand je copie colle la requête dans la console.
    Je ne comprends vraiment pas.

    Nom : Capture.PNG
Affichages : 371
Taille : 3,6 Ko

    Bien à vous.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Re-bonjour,

    j'ai également testé de mettre les dates en dure dans la requête et j'ai trouvé autre chose de "bizarre":

    les dates sont 1989-02-21.

    j'ai l'erreur:

    Nom : Capture.PNG
Affichages : 528
Taille : 1,7 Ko

    Voici le describe de la table outils:

    Nom : Capture.PNG
Affichages : 418
Taille : 12,5 Ko

    Bien à vous.

  13. #13
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Essayez en console MySQL la requête en n'alimentant que la colonne debutDeValidite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO outils(debutDeValidite)
    VALUES (STR_TO_DATE('21-02-1989', '%d-%m-%Y'))
    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 !

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    J'ai la même erreur:

    Nom : Capture.PNG
Affichages : 406
Taille : 3,1 Ko

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par ardard Voir le message
    Re-bonjour,

    j'ai également testé de mettre les dates en dure dans la requête et j'ai trouvé autre chose de "bizarre":

    les dates sont 1989-02-21.

    j'ai l'erreur:

    Nom : Capture.PNG
Affichages : 528
Taille : 1,7 Ko

    1989 -2 -21 = 1966 !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    1989 -2 -21 = 1966 !

    A +
    A oui, en effet.

  17. #17
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 778
    Par défaut
    Salut ardard.

    Citation Envoyé par ardard
    je n'arrive pas à comprendre où se trouve l'erreur concernant STR_TO_DATE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    STR_TO_DATE('21-02-1989','%d-%m-%Y')
    Vous utilisez à tort la fonction "str_to_date()" dans un insert. Cela ne peut pas fonctionner !
    Le insert attent une date genre '2017-10-03' et non pas une chaîne de caractères de ce genre "STR_TO_DATE('21-02-1989','%d-%m-%Y')".

    Pour résoudre votre problème, vous devez faire la conversion au format de MySql, à savoir "YYYY-MM-DD" dans votre programme, puis ensuite, l'introduire dans votre requête insert sous forme d'une chaîne de caractères.

    Citation Envoyé par ardard
    j'ai également testé de mettre les dates en dure dans la requête et j'ai trouvé autre chose de "bizarre":
    les dates sont 1989-02-21.

    j'ai l'erreur:
    [img]https://www.developpez.net/forums/attachments/p314439d1506413055/bases-donnees/mysql/requetes/souci-str_to_date/capture.png/[img]
    Il me semble que la date en question ne soit pas une chaine de caractères, mais une expression arithmétique.

    Quelques liens fort utilent :
    --> https://dev.mysql.com/doc/refman/5.7/en/datetime.html
    --> https://dev.mysql.com/doc/refman/5.5...functions.html

    @+

Discussions similaires

  1. souci sur une relation
    Par Eh_manu dans le forum Access
    Réponses: 22
    Dernier message: 05/06/2006, 10h06
  2. soucis sur les USER DEFINED DATA TYPE
    Par f_bobo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2006, 15h53
  3. [C#] Petit soucis sur un TreeView ...
    Par hobotalker dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/11/2005, 15h33
  4. Petit souci sur la libération d'une connexion tcp
    Par alexandre75 dans le forum Développement
    Réponses: 1
    Dernier message: 08/11/2005, 19h43
  5. souci sur ajout de données de zone de liste
    Par Tierisa dans le forum IHM
    Réponses: 6
    Dernier message: 27/09/2005, 08h30

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