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

SQL Oracle Discussion :

between sur 2 dates


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 95
    Points : 51
    Points
    51
    Par défaut between sur 2 dates
    Bonjour je fais deux requetes sql de recherche dans une base entre deux dates, mais suivant le format dans lequel j'écris les dates je n'ai pas les mêmes réponses:

    La premiere me donne un resultat correct, c'est a dire la journée du 14/02/2008 et du 15/02/2008,
    mais la deuxieme requete me donne le même resultat mais avec en plus la journee du 15/01/2008 !!!

    1er requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select to_char(datetat,'YYYYMMDD') as resultdate, count(produit) as result
    FROM ligclts
    WHERE qtlivr > 0 and numcde like 'C80%' and to_char(datetat,'YYYYMMDD') between '20080214' and '20080215' 
    Group by to_char(datetat,'YYYYMMDD')
    order by to_char(datetat,'YYYYMMDD') ASC

    2eme requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select to_char(datetat,'DD/MM/YYYY') as resultdate, count(produit) as result
    FROM ligclts
    WHERE qtlivr > 0 and numcde like 'C80%' and to_char(datetat,'DD/MM/YYYY') between '14/02/2008' and '15/02/2008'
    Group by to_char(datetat,'DD/MM/YYYY')
    order by to_char(datetat,'DD/MM/YYYY') ASC


    merci

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    pourquoi comparer des dates en les convertissant en chaines ????

    les comparaisons de dates en tant que dates marche très bien !

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    C'est quoi le type de données de la zone "datetat" (desc de la table ligclts)?

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mais la deuxieme requete me donne le même resultat mais avec en plus la journee du 15/01/2008 !!!
    Bien sur , c'est tout à fait normal :
    '15/01/2008' < '16/01/2008' < '16ZZZ' < 'COUCOU'
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 95
    Points : 51
    Points
    51
    Par défaut suite ...
    Mais si je fais to_date a la place d'un to_char, j'ai aucune ligne:
    Le champ datetat est un champ date d'oracle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT to_date(datetat,'DD/MM/YYYY') AS resultdate, count(produit) AS result
    FROM ligclts
    WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat,'DD/MM/YYYY') BETWEEN '14/02/2008' AND '15/02/2008'
    GROUP BY to_date(datetat,'DD/MM/YYYY')
    ORDER BY to_date(datetat,'DD/MM/YYYY') ASC

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    TO_DATE d'une colonne date ça n'a aucun sens

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT datetat AS resultdate, count(produit) AS result
    FROM ligclts
    WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat,'DD/MM/YYYY') BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
    GROUP BY datetat
    ORDER BY datetat ASC

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Encore une incompréhension entre DATE et FORMAT
    Pas de TO_DATE sur une DATE
    un FORMAT (genre DD/MM/YYYY) sert à transformer une date en une chaine de caractère avec un format pour l'utilisateur.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 95
    Points : 51
    Points
    51
    Par défaut
    cela ne donne aucun resultat!

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    t'es sûr qu'il y a des lignes au moins ?

    que donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT datetat
    FROM ligclts
    WHERE qtlivr > 0 AND numcde LIKE 'C80%'

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 95
    Points : 51
    Points
    51
    Par défaut
    oui il y a bien des lignes!
    La première version de la requete sql me donne 2 lignes de résultat.

    Merci

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est trop demandé que d'avoir le résultat ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 95
    Points : 51
    Points
    51
    Par défaut
    Resultat de la premiere requete avec les dates en YYYYMMDD:
    20080214 5836
    20080215 5539
    Resultat de la deuxieme requeteavec les dates en DD/MM/YYYY:
    14/02/2008 5836
    15/01/2008 5483
    15/02/2008 5539

  13. #13
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    et ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT datetat AS resultdate, count(produit) AS result
    FROM ligclts
    WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND datetat BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
    GROUP BY datetat
    ORDER BY datetat ASC

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 95
    Points : 51
    Points
    51
    Par défaut
    cela me donne toute les lignes!

  15. #15
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    j'avais omis de remplacer un to_date(datetat)... tu pourrais quand même faire l'effort de réfléchir

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 95
    Points : 51
    Points
    51
    Par défaut presque bon!
    si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT datetat AS resultdate, count(produit) AS result
    FROM ligclts
    WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat) BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
    GROUP BY datetat
    ORDER BY datetat ASC
    il me donne toutes les lignes, par contre avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT to_date(datetat,'DD/MM/YYYY') AS resultdate, count(produit) AS result
    FROM ligclts
    WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat) BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
    GROUP BY to_date(datetat,'DD/MM/YYYY')
    ORDER BY to_date(datetat,'DD/MM/YYYY')ASC
    il me donne:
    2008-02-14 00:00:00:0 5836
    2008-02-15 00:00:00:0 5633

    alors que je souhaites avoir les dates en resultat sous la forme : DD/MM/YYYY


    ps: desole c'est juste mon deuxieme jour sous oracle!

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 95
    Points : 51
    Points
    51
    Par défaut correction!
    c'est plutôt ceci ma derniere requete qui est presque bonne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT to_date(datetat) AS resultdate, count(produit) AS result
    FROM ligclts
    WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat) BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
    GROUP BY to_date(datetat)
    ORDER BY to_date(datetat) ASC
    merci pour la patience!

  18. #18
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    to_date(datetat) est erroné... j'sais pas comment faut te le dire... datestat est déjà une date, t'as pas besoin de faire une conversion d'une date en date

  19. #19
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par cedlannoy Voir le message
    alors que je souhaites avoir les dates en resultat sous la forme : DD/MM/YYYY
    donc là c'est un TO_CHAR qu'il faut faire...

    TO_DATE('14/02/2008') je convertis la chaine '14/02/2008' en date pour la comparer à une colonne date

    TO_CHAR(datestat,'DD/MM/YYYY') je convertis une date en chaine de caractères avec le format voulu

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

Discussions similaires

  1. Between sur des date vides
    Par Kreepz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 15/04/2014, 15h30
  2. [AC-2000] Condition BETWEEN sur une date
    Par TweeKs dans le forum VBA Access
    Réponses: 8
    Dernier message: 18/04/2013, 12h03
  3. Between sur deux dates avec du null
    Par OracleMan dans le forum Oracle
    Réponses: 2
    Dernier message: 07/08/2012, 10h43
  4. requete between sur dates
    Par cedlannoy dans le forum Débuter
    Réponses: 5
    Dernier message: 18/02/2008, 12h34
  5. requete sql avec between sur des champs de type Date
    Par ersoufiane dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/08/2006, 19h43

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