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

 Oracle Discussion :

Date et between


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut Date et between
    Bonjour;

    Petit souci : je dois récupérér ttes les semaines les data : a, b et c => ca fonctionne si c'est le même mois (du 07 au 14 Fév) par contre desque ca se chevauche avec un autre mois (du 28 janv au 01 Fev) => ce me renvoi rien ?

    Ci-joint ma req :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT sum(A) as a,sum(B) as b,sum(C) as c  FROM c.statistics   WHERE  to_char(date_stat, 'DD/MM/YYYY') BETWEEN to_char((?), 'DD/MM/YYYY') AND to_char((?), 'DD/MM/YYYY')}
    Merci

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    si tu comparais des dates au lieu des chaines de caractères tu n'aurais pas ce problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sum(A) AS a,sum(B) AS b,sum(C) AS c  
    FROM c.statistics   
    WHERE date_stat BETWEEN to_date((?), 'DD/MM/YYYY') AND to_date((?) + 1, 'DD/MM/YYYY'))
    en supposant que date_stat est bien au format date

    Note : to_date((?) + 1, 'DD/MM/YYYY'))

    j'ajoute un jour puisque la variable n'inclus pas les heures (contrairement au champ date_stat probablement).

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Ton +1 n'est pas bon Orafrance, vu que le BETWEEN prend en compte les bornes. Faut donc enlever 1 seconde pour repasser sur la bonne date
    Faut faire to_date((?) + 1 - 1/24/3600, 'DD/MM/YYYY'))

    Ou mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trunc(date_stat) BETWEEN to_date('01/03/2008' 'DD/MM/YYYY') AND to_date('03/03/2008', 'DD/MM/YYYY'))

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    certes par contre pour le TRUNC, gare à l'index

  5. #5
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    Citation Envoyé par orafrance Voir le message
    certes par contre pour le TRUNC, gare à l'index
    ... ou alors crée un "functional index" de Trunc(date_stat)
    (j'ai jamais trouvé une traduction française convenable pour ""functional index" ... )

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    index de fonction

  7. #7
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    Citation Envoyé par yanis97 Voir le message
    Bonjour;

    Petit souci : je dois récupérér ttes les semaines les data : a, b et c => ca fonctionne si c'est le même mois (du 07 au 14 Fév) par contre desque ca se chevauche avec un autre mois (du 28 janv au 01 Fev) => ce me renvoi rien ?

    Ci-joint ma req :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT sum(A) as a,sum(B) as b,sum(C) as c  FROM c.statistics   WHERE  to_char(date_stat, 'DD/MM/YYYY') BETWEEN to_char((?), 'DD/MM/YYYY') AND to_char((?), 'DD/MM/YYYY')}
    Merci

    Si tu tiens absolument a faire comme ca et a passer par des char, change leur format : YYYYMMDD

    En effet , ton format ne permets pas de faire ce test !
    Ca donne pour oracle le truc suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chainededate entre 28012008 et 14022008
    La comparaison par chaine se fait caractere par caractere en gros donc ca donne une chaine dont le 1er caractere est apres 2 et avant 1 => impossible

    Si tu mets au format : YYYYMMDD ca marche ( ce format est à utiliser pour toutes comparaisons en chaine)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chainedate entre 20080128 et 20080214
    ca marche !

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Par défaut
    Citation Envoyé par yanis97 Voir le message
    Bonjour;

    Petit souci : je dois récupérér ttes les semaines les data : a, b et c => ca fonctionne si c'est le même mois (du 07 au 14 Fév) par contre desque ca se chevauche avec un autre mois (du 28 janv au 01 Fev) => ce me renvoi rien ?

    Ci-joint ma req :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT sum(A) as a,sum(B) as b,sum(C) as c  FROM c.statistics   WHERE  to_char(date_stat, 'DD/MM/YYYY') BETWEEN to_char((?), 'DD/MM/YYYY') AND to_char((?), 'DD/MM/YYYY')}
    Merci
    Fais simplement ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT sum(A) as a,sum(B) as b,sum(C) as c  FROM c.statistics   WHERE  date_stat BETWEEN dat1 and date2

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Donc selon toi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    col between '24/05/2008 10:00:00' and '25/05/2008 10:00:00'
    C'est équivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    col between '24/05/2008' and '25/05/2008'


    Merci de vérifier tes dires avant de répondre à une discussion

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Par défaut
    Citation Envoyé par orafrance Voir le message
    Donc selon toi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    col between '24/05/2008 10:00:00' and '25/05/2008 10:00:00'
    C'est équivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    col between '24/05/2008' and '25/05/2008'


    Merci de vérifier tes dires avant de répondre à une discussion
    Restons courtois. C'est un forum. Si tu connais oracle ou n'importe quel SGBDR, tu connais bien la réponse à ta question.

    Pour t'aider à comprendre mon écrit, dans
    "SELECT sum(A) AS a,sum(B) AS b,sum(C) AS c FROM c.statistics WHERE date_stat BETWEEN dat1 AND date2"

    dat1 et date2 sont des variables date. C'est au posteur de faire des tests.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    le posteur a une requête claire, les heures ne sont pas prises en compte. Ainsi ta réponse n'est pas conforme à sa question et risque d'induire d'autres membres en erreur.

    Comme tu le sais, le type date inclus l'heure ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_stat BETWEEN dat1 AND date2
    est incorrecte si la demande de départ est : "(du 07 au 14 Fév)" qui ne tient donc pas compte des heures.

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Par défaut
    Citation Envoyé par orafrance Voir le message
    le posteur a une requête claire, les heures ne sont pas prises en compte. Ainsi ta réponse n'est pas conforme à sa question et risque d'induire d'autres membres en erreur.

    Comme tu le sais, le type date inclus l'heure ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_stat BETWEEN dat1 AND date2
    est incorrecte si la demande de départ est : "(du 07 au 14 Fév)" qui ne tient donc pas compte des heures.
    Si c'est cela le besoin du posteur, Ok pas de pétard. Mais, restons COOL quoi ... On bosse pour une communauté invisible.

Discussions similaires

  1. Acces probleme de Date avec Between
    Par kahya dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/05/2007, 16h26
  2. [DATE] - not between problem
    Par jacquesh dans le forum Oracle
    Réponses: 19
    Dernier message: 21/03/2007, 21h04
  3. Réponses: 1
    Dernier message: 05/10/2006, 04h20
  4. Réponses: 4
    Dernier message: 13/02/2006, 18h58
  5. [SQL] date et between
    Par masseur dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 03/02/2006, 09h49

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