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

SQL Procédural MySQL Discussion :

DATE_FORMAT pour comparer des dates


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 65
    Points
    65
    Par défaut DATE_FORMAT pour comparer des dates
    Bonjour,

    Dans une table, j'ai un champ datenote de type DATETIME.

    Dans l'interface web de saisie, l'utilisateur saisit deux dates entre lesquelles il veut afficher ses notes saisies, dans des champs texte HTML (date1 et date2).

    Je cherche donc à ce que l'application remonte les enregistrements dont la datenote est située entre date1 et date2.

    Voici ce que j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT * FROM notes 
    WHERE DATE_FORMAT(datenote, '%e/%m/%y') BETWEEN DATE_FORMAT('2007-05-01 00:00:00', '%e/%m/%y') 
    AND DATE_FORMAT('2007-05-30 00:00:00', '%e/%m/%y')";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT * FROM notes 
    WHERE DATE_FORMAT(datenote, '%e/%m/%y') BETWEEN DATE_FORMAT($date1, '%e/%m/%y') 
    AND DATE_FORMAT($date2, '%e/%m/%y')";
    L'utilisateur saisit les dates de cette façon : jj/mm//yy.

    Mais aucun de ces tests ne fonctionne. Les enregistrements remontés ne sont pas forcément entre les dates demandées. Pouvez-vous m'aiguiller svp ?

    Merci d'avance !

  2. #2
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Pour comparer des dates je te conseille d'utiliser la fonction DATEDIFF.

  3. #3
    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,
    Tu doit être sûr du format et de la validité de date1 et date2 et faire en sorte de les formater 'YYYY-MM-DD'.
    Le filtre WHERE sera de la forme
    WHERE datenote BETWEEN date1 AND date2
    en sachant qu'avec BETWEEN, les bornes sont incluses, ce qui équivaut à
    WHERE datenote >= date1 OR datenote <= date2

  4. #4
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    Merci, je vais tester vos conseils et je reviens vers vous ensuite !

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Sinon, la méthode la plus simple peut encore être le timestamp...

    La tu as un moment T et plus un date donc tu compare un nombre et plus une date...

  6. #6
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    Mercii l'ensemble de vos réponses m'ont bien aiguillée pour corriger mon code. Le datediff m'a permis de comprendre que je pouvais comparer un champ de type date et un autre de type datetime ensemble, ce qui m'a bien arrangée.

    Il m'a suffit ensuite de convertir les champs saisis par les utilisateurs au format date avec un ereg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2})", $saisie1, $regs );
     $date1 = "20$regs[3]-$regs[2]-$regs[1]";
     ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2})", $saisie2, $regs );
     $date2 = "20$regs[3]-$regs[2]-20$regs[1]";
     $requete .= " AND datemodif >= '$date1' AND datemodif <= '$date2'";
    Je vais même remplacer mes AND par un BETWEEN pour un code plus propre.

    Merci à vous !!!

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

Discussions similaires

  1. [Toutes versions] Code VBA pour comparer des dates
    Par Tagada_Or dans le forum VBA Access
    Réponses: 17
    Dernier message: 24/09/2014, 09h08
  2. [11g] Utilisation d'un DECODE pour comparer des dates
    Par shakapouet dans le forum SQL
    Réponses: 6
    Dernier message: 04/04/2014, 16h29
  3. Fonction pour comparer des dates en matlab
    Par mihaispr dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/07/2009, 16h40
  4. regex pour comparer des dates, des chiffres, des nombres
    Par lex13 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/07/2007, 11h51
  5. Probleme Pour Comparer Des Dates
    Par Domingo60 dans le forum VBScript
    Réponses: 7
    Dernier message: 25/04/2007, 09h33

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