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 :

Clause WHERE pour SELECT entre deux dates


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Clause WHERE pour SELECT entre deux dates
    Bonjour,

    Après deux heures de recherche sur le forum et le web, je viens poser ma question ...
    J'aimerai faire un SELECT dans une table pour récupérer des enregistrements entre deux dates. Le problème est que les colonnes dates sont découpées en années / mois / jours. J'ai donc trois colonnes. Sans cela, il aurait simple de faire un WHERE date>='date_debut' AND date<='date_fin'.

    Je n'ai qu'un acces en SELECT à ma table, donc je ne peux pas en modifier la structure.

    Je programme sous VBA (Excel) et je me connecte via ODBC à une table Access.

    Si je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT .... FROM ma_table WHERE ((annee>='annee_debut') AND (mois>='mois_debut') AND (jours>='jour_debut') AND (annee<='annee_fin') AND (mois<='mois_fin') AND (jours<='jour_fin'))
    Je loupe beaucoup de résultats ...

    Avez vous une idée simple ? (j'ai bien pensé à recopier une partie de la table, mais au vu du nombre d'enregistrement je pense que c'est un peu trop "usine à gaz").
    J'ai essayé de concaténer les champs de dates (jours, mois et année) dans la clause WHERE mais j'ai une erreur de syntaxe.

    Merci d'avance,
    Antoine

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Avec un truc comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... where annee + mois + jour > = Annee_debut + mois_debut + jour_debut...

  3. #3
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Citation Envoyé par arogues Voir le message

    J'ai essayé de concaténer les champs de dates (jours, mois et année) dans la clause WHERE mais j'ai une erreur de syntaxe.
    moi je t'aurais orienté vers ça...peut-être la syntaxe peut-elle être travaillée.

    ta requête concaténée?

    [sous Access...ça va être chiant...]
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Citation Envoyé par pc75 Voir le message
    Bonjour,

    Avec un truc comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... where annee + mois + jour > = Annee_debut + mois_debut + jour_debut...
    Je pense que ça ne marche pas, parce que les jours prennent plus de poids que les mois et les années...

    cela dit :
    annee * 10000 + mois * 100 + jour
    est laid mais plus juste ?

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Non.

    Il faut envoyer une vraie date à Access. Débrouillez vous pour concaténer et transtyper vos 3 colonnes en une date.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci beaucoup ! Malheuresement, des que je fais une addition ou multiplication dans ma requete j'ai une erreur SQL0802 - erreur de conversion ou de mappage de données.
    En fait, la base ne dois pas être sous Access ... (mais je ne connais pas bien tout ca).
    Donc je vais juste faire un WHERE année> annee_deb AND annee < annee_fin puis j'ignorerai dans le code les jours et mois qui ne corressponde pas ... Ca fera un paquet d'enregitrement en plus ...

    Mais merci pour l'idée (en fait j'aurai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE ((annee-1970)*365 +  (mois*30) + jours>(annee_debut-1970)*365 + (mois_debut*30) + jour_debut)
    Il aurait peut etre fallu utiliser pas 365 et 30 mais des chiffres un peu précis ...

  7. #7
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    tu ne sais pas si tu travailles sous Access?
    admettons..simplement connaitre le SGBD pourra s'avérer nécessaire dans le choix de construction de la requête.

    Par ailleurs ici, il ne s'agit pas d'additionner les dates mais de concaténer les 3 champs avant de convertir tout ça dans un format de date convenable.
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Citation Envoyé par arogues Voir le message
    Donc je vais juste faire un WHERE année> annee_deb AND annee < annee_fin puis j'ignorerai dans le code les jours et mois qui ne corressponde pas ... Ca fera un paquet d'enregitrement en plus ...
    Si tu ne veux vraiment pas concaténer tes colonnes pour obtenir une vraie date, on peut revenir au problème initiale : ta condition de comparaison est fausse !
    Quand tu testes annee1 > annee2 ET mois1 > mois2 ET ...
    ça veut dire que 01/05/2007 n'est pas inférieur à 01/01/2008 !
    Dans la logique de ce que tu veux faire, il faut imbriquer les tests...
    (Si annee1 > annee2 OU (anne1 = anne2 ET mois1 > mois2) OU ...)

    Non ?

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    re,

    Merci pacmann. J'ai fait un WHERE très long mais ca marche !
    La concaténation ne marchait pas ... J'ai essayais pendant plus de 2 hrs ...

Discussions similaires

  1. DateS entre deux dates pour un couple (mois/annee)
    Par hypnos_1 dans le forum Requêtes
    Réponses: 11
    Dernier message: 07/12/2008, 17h29
  2. Selection entre deux dates
    Par Kaiba dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/07/2007, 15h49
  3. Réponses: 1
    Dernier message: 05/10/2006, 04h20
  4. condition pour afficher entre deux dates
    Par forbans dans le forum Access
    Réponses: 1
    Dernier message: 13/06/2006, 09h13
  5. Requête pour calculer le temps entre deux dates
    Par Badboy62cfp dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 13h50

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