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

Langage SQL Discussion :

<= (plus petit égal) + recherche de date


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Par défaut <= (plus petit égal) + recherche de date
    Bonjour,

    j'ai déjà tenté ma chance sur le forum de PostgreSQL, mais sans succès, et mon problème est surtout du SQL plutôt que propre à une BDD alors je vous explique mon problème.

    je travaille sous PostgreSQL 8.1, sous Windows.

    j'ai une table avec un champ de type Date, j'aimerais faire 1 SELECT et reprendre tous les enregistrements entre 2 Dates



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ma_table(nom_champ VARCHAR, date DATE)

    je fais pour cela 1 SELECT comme ceci



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom_champ WHERE date >=dateDebut AND date <= dateFin

    j'ai remarqué que


    ne fonctionnait pas, exemple si je sélectionne tous les enregistrements >= 17 juillet 2006 et <= 17 juillet 2006, il ne reprendra rien, par contre, si l'on met seulement seulement les enregistrements >= 17 juillet 2006, là pas de problème, cela prend tous les enregistrements inscris le 17 juillet 2006 correctement.

    Y'aurait t-il un "bug" avec "plus petit égal" et les dates ???

    je précise que mon format des dates est le suivant mois/jour/année

    Je vous remercie d'avance

  2. #2
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Salut,
    je connais pas ton SGBD, mais essai ta requete avec BETWEEN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT nom_champ
    FROM Ma_table
    WHERE date BETWEEN date_debut AND date_fin;
    Pense au retour à la ligne quand tu insères du code, c'est plus facile à lire.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Je ne pense pas que ce soit réellement ton cas, mais il faut toujours éviter de nommer un champ date c'est un mot réservé, et cela génère des problèmes. Néanmoins vu le nom de la table et le nom de l'autre champ je suppose qu'en vrai il ne s'appelle pas comme cela.

    Est-ce qu'il y a vraiement des lignes avec comme date le 17 juillet 2006 à 00h00 00, en général les problèmes d'intervalle sur les dates interviennent lorsqu'on n'a pas pris en compte les heures.
    Attention peut-être que posgresSQL stocke les date sans les heures, je ne le sais pas, mais pour SQL server, oracle et d'autre, si tu veux tout ce qui s'est passé le 17 juillet , il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom_champ WHERE date >='2006-07-17'AND date <'2006-07-18'
    Cordialement
    Soazig

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Par défaut
    Citation Envoyé par soazig
    Bonjour,
    Je ne pense pas que ce soit réellement ton cas, mais il faut toujours éviter de nommer un champ date c'est un mot réservé, et cela génère des problèmes. Néanmoins vu le nom de la table et le nom de l'autre champ je suppose qu'en vrai il ne s'appelle pas comme cela.

    si tu veux tout ce qui s'est passé le 17 juillet , il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom_champ WHERE date >='2006-07-17'AND date <'2006-07-18'
    oui effectivement, mon champ date ne s'appelle pas "date", c'était juste pour l'exemple.

    Le problème d'ajouter un jour pour savoir ce qu'il s'est passé pour 1 seul jour, c'est que tu dois gérer des fins de mois (28 février, 29 février, 30 novembre ...) voir les années, donc ce n'est pas l'idéal, car je ne sais pas à l'avance les dates de saisie.

    Mais bon, je crois que le plus simple c'est que si je sélectionne 2x le même jour comme critère de sélection, ex. 19 juillet 2006, au 2ème critère de sélection j'ajoute, 23h59mn et comme ca le problème est quasiment réglé

    Et au fait, la commande BETWEEN ne fonctionne pas pour 2 champs représentant le même jour, mais merci quand même, j'avais 1 peu oublié cette commande pourtant super utilie !

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Par défaut
    je crois que même si mes 2 critères de sélection ne sont pas égaux, j'ajoute de toute façon 23h59mn à la date de fin.

    Vu que lorsqu'on fait 1 requête, avec comme

    date_debut : 20-07-2006
    date_fin : 21-07-2006

    c'est que l'on veut tous les enregistrements du 20-07-2006 et 21-07-2006.

    Pour mon problème du <=(plus petit égal), je pense que le problème c'est que par défaut, si on ne renseigne que la date sous Postgresql, les valeurs des heures,minutes,secondes sont à 00

    donc si on essaye de faire

    date_debut >= 20-07-2006 (00:00:00 (hh:mm:ss inséré par défaut)) AND date_fin <= (20-07-2006 (00:00:00), il est normal qu'on ne retrouve aucun enregistrement de la journée.

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

Discussions similaires

  1. Rechercher la date la plus récente dans une BD
    Par kurkaine dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2006, 19h10
  2. Réponses: 11
    Dernier message: 26/05/2006, 17h51
  3. [XSL] gestion de dates, date plus petite qu'une autre.
    Par Caille Rotie dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/01/2006, 11h01
  4. [TP] Tirer 10 dates et afficher la plus petite
    Par moustaphes dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 16/08/2005, 09h54
  5. Réponses: 3
    Dernier message: 16/12/2002, 16h12

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