RESULTAT REQUETE SQL ERRONE

Résolu
bigbik Messages postés 165 Statut Membre -  
bigbik Messages postés 165 Statut Membre -
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. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    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)
    2
  2. Creutzou Messages postés 655 Statut Membre 30
     
    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 ~~
    0
  3. Deathmann Messages postés 243 Statut Membre 59
     
    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.
    0
    1. Creutzou Messages postés 655 Statut Membre 30
       
      Plop,

      je ne vois pas trop de difference, car la avec le égale tu comprends également le 02/06 et le 06/06
      0
    2. Deathmann Messages postés 243 Statut Membre 59
       
      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.
      0
  4. bigbik Messages postés 165 Statut Membre 1
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bigbik Messages postés 165 Statut Membre 1
     
    Toujours le même problème. c'est un truc de "fou".

    avez-vous d'autres solutions svp
    0
    1. Creutzou Messages postés 655 Statut Membre 30
       
      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.
      0
    2. Deathmann Messages postés 243 Statut Membre 59
       
      je réfléchis à une solution et je te renverrai la bonne requête si c'est en varchar
      0
  7. bigbik Messages postés 165 Statut Membre 1
     
    merci de votre aide
    0
  8. bigbik Messages postés 165 Statut Membre 1
     
    Creutzou pourrais-tu m'expliquer davantage. je te suis pas à 100%
    0
    1. Deathmann Messages postés 243 Statut Membre 59
       
      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.
      0
    2. Creutzou Messages postés 655 Statut Membre 30
       
      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 ?
      0
  9. bigbik Messages postés 165 Statut Membre 1
     
    et il est pas possible de convertir ?
    0
  10. bigbik Messages postés 165 Statut Membre 1
     
    je travaille avec sql 2000.
    0
  11. Deathmann Messages postés 243 Statut Membre 59
     
    Je ne connais pas ce logiciel désolé
    0
  12. Deathmann Messages postés 243 Statut Membre 59
     
    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;

    0
  13. bigbik Messages postés 165 Statut Membre 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;
    0
  14. Deathmann Messages postés 243 Statut Membre 59
     
    Comment ça ?
    0
  15. bigbik Messages postés 165 Statut Membre 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
    0
  16. Deathmann Messages postés 243 Statut Membre 59
     
    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.
    0
  17. bigbik Messages postés 165 Statut Membre 1
     
    je sais pas comment faire.
    0
  18. bigbik Messages postés 165 Statut Membre 1
     
    BIG MERCI A TOUS CA MARCHE NICKEL

    ENCORE MEEERRRRCCCCCCCCCCCCCIIIIIIIIIIIIIIII
    0
    1. bigbik Messages postés 165 Statut Membre 1
       
      Par contre avant d'oublier je souhaiterai changer le type du champ pour ne plus me prendre la tête. comment faire ?
      0