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 :

Problème date BDD -> Sql


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 64
    Points : 41
    Points
    41
    Par défaut Problème date BDD -> Sql
    Bonjour,
    Voila j'ai un problème plutot conséquent.
    Je travaille sur une base de données qui est un peu ancienne qui est rempli par un formulaire simple. Sauf que dans ce formulaire il y a un champs date (qui est en fait un type texte dans la base de donnée) mais qui n'a pas toujours était traité correctement.
    C'est a dire qu'avant c'était un champs libre ou on pouvait écrire ce qu'on voulait. Je me trouve donc avec des dates du style: "Jeudi" ou "dimanche" ou "4112007" ou "4/12/2007".

    Bref comment je pourrais faire pour tester toutes mes dates (texte) selon la forme suivante: JJ/MM/AAAA et si ca correspond pas a ce format je transforme en 01/01/2007?

    Je vous remercie vraiment! Bonne journée.

  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
    D'abord, le format DATE standard SQL est 'AAAA-MM-JJ'.

    Selon ton SGBD, il est possible que la fonction CAST soit capable d'interpréter correctement plusieurs styles de dates. A essayer.

    Sinon, il faut chercher les fonctions de dates propres à ton SGBD dans sa documentation. Il existe en principe des fonctions de formatage de date et d'extraction de parties de dates (EXTRACT).
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Oui oui, mais le problème c'est que ce n'est pas un type date! En fait elles sont rentrés dans la base de données en tant que type texte. Du coup toutes les fonctions sur les dates ne sont pas possibles :s

  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
    Ben justement tu veux les transformer en vraie date non ?

    Tu crées une nouvelle colonne de format DATE, tu fais les requêtes UPDATE nécessaires à l'aide de fonctions de formatage de date et/ou d'expressions régulières, tu supprimes (ou renommes) la colonne actuelle des mauvaises dates puis tu renommes la nouvelle colonne comme l'ancienne.

    Sans le nom et la version de ton SGBD, difficile d'aider sur ce sujet car les différents SGBD ont poarfois des fonctions différentes pour traiter les dates. Idem pour les expressions régulières.

    Bref, suis les consignes données par les règles de ce forum.
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Je suis sur Mysql v5.0.32.

    Mais en fait je veux pas créer une nouvelle table avec un type date (j'ai trop de page derrière qui utilise cette facon là, je me sent pas de reprendre toutes les pages pour changer la gestion des dates :s Quoique je pourrais dupliquer ma table date!!!! Oué ca me parait cool comme ca.
    Mais après comment je fais pour modifier toutes les valeurs d'un champs texte selon ce qu'il y est ecrit? ^o)

    Petit exemple:
    Ancien table date: 4/12/2007
    Nouvelle table date: 2007/12/04
    ou bien encore:
    Ancienne table: mercredi ()
    Nouvelle table date: 2007/01/01

    Voila j'espere que je me suis fais comprendre cette fois ci ^^

  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
    Un exemple de ce qu'il est possible de faire avec une des fonctions de date de MySQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT STR_TO_DATE('4/12/2007', '%e/%m/%Y')
    Résultat : 2007-12-04

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE taTable
    SET taColonneDate = STR_TO_DATE(taColonneDate, '%e/%m/%Y')
    WHERE taColonneDate LIKE '%/%/%'
    Le LIKE peut être à remplacer par un REGEXP.
    Il vaut mieux tester quelles dates seraient modifiées avec un SELECT avant de lancer l'UPDATE pour vérifier qu'il ne traduise pas mal certaines dates.
    C'est pour ça que je préconisais l'ajout d'une nouvelle colonne de dates pour ne pas casser l'ancienne tout de suite.
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE taTable
    SET taColonneDate = STR_TO_DATE(taColonneDate, '%e/%m/%Y')
    WHERE taColonneDate LIKE '%/%/%'
    Le like va vérifier que mon champs soit sous la forme VAR / VAR / VAR c'est bien ca? Mais est ce que je peux de cette facon tester que la première variable possède bien 2 chiffres? Pour éviter que je me retrouve avec un 7/12/2007 mais bien avec un 07/12/2007 par exemple.

  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
    Le format qui est dans le STR_TO_DATE est adapté aux jours et aux mois à 1 ou deux chiffres (sauf erreur de ma part).
    Le LIKE va effectivement prendre en compte toutes les dates qui contiennent 2 / entourés d'autre chose.
    Là où ça peut coincer, c'est si tu as des dates du genre jeudi/26/novembre. C'est tordu d'écrire une date comme ça mais on ne sait jamais. A voir dans tes données.

    C'est pour ça qu'il faut tester d'abord avec un SELECT quelles dates seront prises en compte dans l'UPDATE. Pour une sélection sur un format plus précis, il faut utiliser les REGEXP.
    Bon courage !

    Le format qui est indiqué dans STR_TO_DATE est le format de la chaîne de caractères en entrée mais la sortie (le résultat de la conversion donc) sera toujours au format standard de date 'AAA-MM-JJ'.
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Bon ben j'ai toujours un probleme avec le STR_to_DATE()

    Voila mon code qui est tout simple et a ce que j'ai compris devrait remplacer tous mes champs date_nouvelle par 2007/04/27.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE formulaire SET date_nouvelle = STR_TO_DATE('27/04/2007', '$d/$m/$Y')
    Le problème c'est que ca fait rien du tout... (Même pas d'erreur il fait son bordel mais ne marche pas)

    Y aurait-il une étape que j'ai sauté ou bien? =/

  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
    Dans le format, c'est pas dollar ($) mais pourcent (%) !
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Bon j'ai réussi!
    Voila mon code, si jamais ca peut aider des personnes pour le futur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $REQdateAncienne = "select * from formulaire_adrien where date_demande like '%-%-%' ";
    $SQLdateAncienne = mysql_query($REQdateAncienne) or die ("requete date ancienne");
     
    while ($row = mysql_fetch_array($SQLdateAncienne)){
    	$dateAncienne = $row['date_demande'];
    	$numero=$row['numero'];
    	echo"$dateAncienne $numero <br>";
    	$REQconvert = "UPDATE formulaire_adrien SET date_nouvelle = STR_TO_DATE('$dateAncienne', '%d-%m-%Y') where numero=$numero ";
    	$SQLconvert = mysql_query($REQconvert);
    }
    L'erreur a ne pas faire (et c'est sur laquelle je suis resté une journée) c'est de bien mettre la variable du STR_TO_DATE entre quote!!! Sinon ca ne fonctionne pas

    Merci beaucoup Philippe!


    Ps: La fonction STR_TO_DATE ne fonctionne qu'à partir de la version v4.1 ... Alors si votre serveur est antérieur pas la peine de passer deux jours a vous arracher les cheveux pour rien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème date type france formulaire et type anglais sql
    Par bobosh dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 07/08/2008, 07h52
  2. [C++B5]Problème avec une requëte SQL sur BDD ACCESS
    Par Sleeping Lionheart dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/04/2008, 09h03
  3. [SQL] problème update bdd
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/06/2007, 17h59
  4. Problème date avec SQL
    Par langelot222 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/04/2007, 09h45
  5. Réponses: 13
    Dernier message: 27/12/2006, 17h52

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