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 :

Comment rechercher une plage de date explosé dans 3 colonnes différentes ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Par défaut Comment rechercher une plage de date explosé dans 3 colonnes différentes ?
    Bonjour,

    J'ai une base de données (mysql) avec des dates dedans. le problème c'est qu'elles sont entrées dans 3 colonnes (une colonne pour le jour, une autre pour le mois, et une autre pour l'année)

    Par exemple :

    Jour | Mois | Année
    01 | 01 | 2006
    23 | 08 | 2007
    10 | 12 | 2006
    26 | 09 | 2007

    J'ai ensuite créé un formulaire qui me permet de rechercher un plage de date. Par exemple je souhiaterai sélectionner toutes mes dates du 01/02/2007 au 01/09/2007.

    Est-il possible de créer une requête SQL qui fait cela avec les contraites de ma base (3 colonnes pour définir une date) ?

    Si quelqu'un a une idée je suis prenneur car malgrés mes recherche je ne trouve pas de solution.

    Merci d'avance.
    ;-)

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Lisez cet article : http://sql.developpez.com/sqlaz/select/#L8

    D'autre part, n'oubliez pas de préciser la version de MySQL car les versions antérieures à la 4.1 ne supportent pas les sous-requêtes et cela peut conditionner la réponse.

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Par défaut
    Merci pour ce lien très intéressant. Mais j'ai peur que ma version d'SQL ne soit pas compatible (ou ce n'est pas la bonne syntaxe).

    Car quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM XXX WHERE (JOUR) > ('20')
    Ca marche, par contre quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM XXX WHERE (DEJOUR, DEMOIS) > ('20','10')
    Il y a un message d'erreur :
    SQL error: [IBM][Pilote ODBC iSeries Access][DB2 UDB]SQL0104 - Elément syntaxique , n'est pas correct. Eléments corrects : < > = <> <= ¬< ¬> ¬= >= IN IS NOT LIKE BETWEEN.,
    J'utilise php5 et une base DB2 (sur un AS400).

    Arf, on y est presque...

    Merci en tout cas de ton aide, car ça avance ;-)

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par le_binr
    J'utilise php5 et une base DB2 (sur un AS400)
    Je ne connais pas DB2 mais vu le message d'erreur cela signifie très certainement que DB2 - en tout cas la version que vous avez - ne supporte pas la syntaxe du ROW VALUE CONSTRUCTOR.
    On peut déplacer votre message dans le forum DB2 mais je crois que vous ne soyez obligé d'utiliser la 2ème syntaxe décrite dans l'article que je vous ai indiqué plus haut.

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Par défaut
    Bonjour,

    En effet, j'ai donc trouvé une solution qui a l'air de fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT *
    FROM   XXX
    WHERE  ((AN >= ('$rech_annee_1')
             AND (MOIS >= ('$rech_mois_1'))
             AND (JOUR >= ('$rech_jour_1')))
            AND (AN <= ('$rech_annee_2')
                 AND (MOIS <= ('$rech_mois_2'))
                 AND (JOUR <= ('$rech_jour_2'))))
    En jouant avec les parenthèse et les AND ça à l'aire de fonctionner, même si ce n'est pas un requête SQL très obtimisé, mais i n'y a pas le choix.

    Merci pour le lien, ca ma permis de trouver la solution !
    ;-)

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Je ne crois pas que ce soit la bonne requête
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Avec autant de parenthèses inutiles qui, en plus, complexifient la lisibilité de la requête, ce n'est pas surprenant

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/09/2008, 10h09
  2. Réponses: 15
    Dernier message: 17/01/2008, 17h02
  3. Réponses: 16
    Dernier message: 14/09/2006, 06h43
  4. Comment rechercher une chaine dans plusieurs tables ?
    Par tsing dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/11/2005, 18h04
  5. [date] Recherche dans une plage de dates
    Par astro84 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/06/2005, 17h13

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