RESULTAT REQUETE SQL ERRONE

Résolu
Bonjour,

J'ai un grand problème avec ma base de données. j'explique :
- quand je veux sortir les informations de la base par date, j'ai pas le bon résultat. Par exemple pour une recherche comprise entre le 02 et le 06 juin j'ai les résultats certes de cette période mais j'ai aussi les résultats du 02 au 06 mai qui s'affiche.

voici ma requête : select * from online where date between '02/06/2011' and '06/06/2011'

HELP ME PLEASE A TROUVER LA SOLUTION

17 réponses

  1. Bonjour,

    Tu dis que ton champ date est de type varchar ?? C'est une hérésie...
    Ce n'est pas du tout étonnant comme comportement... car ton between fera des comparaisons sur l'ordre alphabétique !
    Les dates, c'est du type datetime et rien d'autre !

    Tu peux t'en sortir en faisant comme ça (testé et approuvé sous SQL Server 2005)
    select * from online 
    where convert(datetime, date, 103) between convert(datetime, '02/06/2011', 103) and convert(datetime, '06/06/2011', 103)


    Xavier

    (PS : le 103 dans les convert signifie que la date est du type jj/mm/aaaa)
    1. BIG MERCI A TOUS CA MARCHE NICKEL

      ENCORE MEEERRRRCCCCCCCCCCCCCIIIIIIIIIIIIIIII
      1. Par contre avant d'oublier je souhaiterai changer le type du champ pour ne plus me prendre la tête. comment faire ?
    2. Ce sont des dates saisies ? je n'avais pas compris ça comme ça, il faut donc bien que tu convertisses tes dates au format date.
      1. en fait j'ai une page html avec deux zone de saisie. raison pour laquelle la requête avec between est intéressant parce que quand la personne saisie les dates alors et clic sur rechercher automatique la recherhe se lance.

        Par contre ça devient impossible de traiter la demande si la requête est de la forme ci-dessous
        1. j'ai déjà pensé à cette solution mais le problème est que j'ai une application qui tourne et qui est censé exécuté la requête sql. du coup l'utilisation de la requête ci-dessous rend la chose plus compliquer je pense.

          Select *
          From Online
          Where date = '03/06/2011'
          Or date = '04/06/2011'
          Or date = '05/06/2011'
          Order by date ASC;
          1. Cette requête marcherai mais elle n'est pas optimisée du tout, mais sinon pour travailler sur du varchar, il faudrait des conditions like, avec des REquêtes imbriquées, le 'Dawa' quoi ^^

            -->

            Select *
            From Online
            Where date = '03/06/2011'
            Or date = '04/06/2011'
            Or date = '05/06/2011'
            Order by date ASC;

            1. Creutzou pourrais-tu m'expliquer davantage. je te suis pas à 100%
              1. Enfaites, dans les bases de données, tu as plusieurs types de variable (texte, numérique, date, bolléen...) et tu as choisi de prendre du texte pour le faire alors qu'avec un format date, cela aurait été beaucoup plus simple.
              2. je voulais juste dire, que si tu as des opérations à faire sur les dates, il était plus simple de les mettre dans un champs date. Comme ça pour ta sélection, il est plus aisé de faire entre tel et tel période.
                ps: tu es sous quelle système de base de donnée ?
            2. Toujours le même problème. c'est un truc de "fou".

              avez-vous d'autres solutions svp
              1. si tu veux faire des opérations sur les dates, sachant qu'elles sont en varchar, bon courage !
                Je trouve un petit manque de logique.
              2. je réfléchis à une solution et je te renverrai la bonne requête si c'est en varchar
            3. j'ai d'autres bases mais c'est la première fois que je rencontre ce problème.

              le champ date est de type varchar.

              Je vais tester et je reviens vers vous. merci d'avance
              1. Bonjour,

                SELECT *
                FROM Online
                WHERE date >= '02/06/2011' AND date <= '06/06/2011';

                Essayes ça, mais cela dépend du format de ton champs 'date'.

                Cordialement.
                1. Plop,

                  je ne vois pas trop de difference, car la avec le égale tu comprends également le 02/06 et le 06/06
                2. aah, c'est que tu as écris du 2 au 6 mai juste avant ta requête. le 06 c'est le mois de juin ^^

                  SELECT *
                  FROM Online
                  WHERE date > '02/06/2011' AND date < '06/06/2011';

                  Voilà, ça devrait être bon, Cordialement.
              2. Salut,

                Tu n'as cas faire un dateDebut + 1 et un dateFin - 1 ?
                ou sinon tu prends les dates strictement supérieures à dateDebut, et strictement inférieur a dateFin ?

                Ce n'est peut être pas la bonne solution, mais je ferrais comme ça moi ;)
                Tout vient à point à qui sait attendre
                ~~ Cr3u7z0u ~~