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 :

Comparer deux dates au format TEXT


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 206
    Points
    206
    Par défaut Comparer deux dates au format TEXT
    Bonjour à tous !

    Je suis face à un petit soucis.
    En effet, j'ai repris un projet en développement, qui comporte 9 jolies bases de données avec 83 tables et quelques dizaines de milliers d'enregistrements...
    Cependant, le précédent développeur a eu la bonne idée de placer les dates dans un champs text normal au format jj/mm/aaaa.

    Cela ne gène en rien le fonctionnement, seulement, je dois faire un traitement d'anomalies. Je m'explique :

    Si la date du champs de la ligne en question est supérieure à la date actuelle, on l'affiche dans un tableau. Sinon ... Ben sinon, rien !

    J'utilise le PHP comme langage de traitement pour accèder à la base, mais je voudrais éviter de faire un traitement en dehors de la requête.

    Ma question est ( ou plutôt mes questions sont ) donc : Est-il possible de comparer ces deux dates, et si oui, comment ? Serais-je obligé de rééditer le type de champs et de réinsérer les dates au format timestamp de la base de données ( Pour 60 000 enregistrements ) ??

    Bien cordialement.
    La politesse n'a jamais tué personne
    Le langage SMS c'est le mal !
    Pensez au tag

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    La fonction STR_TO_DATE() devrait t'être d'un grand secours.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 206
    Points
    206
    Par défaut
    Merci pour l'info
    Je vais tenter de faire quelque chose avec ça !
    Je tiens tout le monde au courant

    Best regards.
    La politesse n'a jamais tué personne
    Le langage SMS c'est le mal !
    Pensez au tag

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Pas la peine de passer par des complications.



    Il suffit de remarquer que la comparaisons alphanumérique de deux dates considérées sous forme de successions de caractères dans l’ordre aaaammjjHHMMSS donne le même résultat booléen que leur comparaison temporelle.



    Exemples:

    '20091224231245' < '20100401051113' vrai parce que '0' < '1' (3ième caractère)


    '17890714023627' > '17890714023549' vrai car '6' > '5' (12ième caractère)



    Cette comparaison n’est possible que si la comparaison de chaîne de caractères est possible dans le langage utilisé, avec
    ’1’ < ’2’ ,
    ’2’ < ’3’, etc

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 206
    Points
    206
    Par défaut
    J'obtiens donc une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT *
    FROM effectifs_centrales
    WHERE (
    (
       SELECT CURDATE()
    )
    >
    (
       SELECT STR_TO_DATE( Date_Sortie, '%d/%m/%Y' )
    )
    AND Fermetures_comptes =''
    AND Date_Sortie != ''
    )
    Et ça fonctionne ! Je vous remercie pour cette aide précieuse
    La politesse n'a jamais tué personne
    Le langage SMS c'est le mal !
    Pensez au tag

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Et encore mieux comme ça:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT lesnomsdecolonnesquivontbien
    FROM effectifs_centrales
    WHERE  CURDATE() > STR_TO_DATE( Date_Sortie, '%d/%m/%Y' )
    AND Fermetures_comptes =''
    AND Date_Sortie != ''
    La guerre des étoiles
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    J’ai regardé la doc de MySQL mais je ne comprends pas et j'aimerais comprendre:

    que renvoient CURDATE() et STR_TO_DATE() ?

    Des chaînes de caractères ou des données dans un format de temps qui n’est pas une chaîne ?

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

Discussions similaires

  1. Comparer deux dates au format : mid(date, 1, 10)
    Par Superkoala42 dans le forum VBScript
    Réponses: 2
    Dernier message: 08/07/2014, 08h48
  2. Comparer deux dates format jj/mm/aaaa
    Par Erwy dans le forum Télécharger
    Réponses: 0
    Dernier message: 10/01/2012, 16h11
  3. Comparer deux dates
    Par LoicH dans le forum C++Builder
    Réponses: 4
    Dernier message: 04/03/2005, 22h53
  4. [Date] Comparer des dates au format mySQL "date
    Par Marc_P dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 25/10/2004, 15h15
  5. comment comparer deux dates?
    Par billoum dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/08/2004, 21h08

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