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 :

Problème de date sur la fonction BETWEEN


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Problème de date sur la fonction BETWEEN
    Bonjour à tous,

    Je suis entrain de créer un script SQL sous Oracle.
    Je cherche à savoir si la date système est comprise entre deux dates.
    Cependant, en analysant le résultat de la requête je trouve une erreur quand la date système = une des deux bornes.

    Par exemple avec date système = 04/08/2010
    Limite basse de la borne 1 = 26/07/2010
    Limite haute de la borne 1 = 04/08/2010
    Limite basse de la borne 2 = 05/08/2010
    Limite haute de la borne 2 = 15/08/2010

    Dans ce cas, le système ne considère pas la date système dans la tranche 1 ni dans la tranche 2.
    Comment puis-je résoudre le problème ?

    Merci à vous.

    Ci-joint un morceau du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SUM(CASE WHEN SYSDATE < to_date(DECVM,'YYYYMMDD')  THEN DECODE(INDCMV,'D',MTVMV,-MTVMV) ELSE 0 END) AS "NON ECHU",
     
    SUM(CASE WHEN SYSDATE BETWEEN to_date(DECVM,'YYYYMMDD') + 00 AND to_date(DECVM,'YYYYMMDD') + 10 THEN DECODE(INDCMV,'D',MTVMV,-MTVMV) ELSE 0 END) AS "A_0_10_jours",
     
    SUM(CASE WHEN SYSDATE BETWEEN to_date(DECVM,'YYYYMMDD') + 11 AND to_date(DECVM,'YYYYMMDD') + 20 THEN DECODE(INDCMV,'D',MTVMV,-MTVMV) ELSE 0 END) AS "A_11_20_jours",
     
    SUM(CASE WHEN SYSDATE BETWEEN to_date(DECVM,'YYYYMMDD') + 21 AND to_date(DECVM,'YYYYMMDD') + 30 THEN DECODE(INDCMV,'D',MTVMV,-MTVMV) ELSE 0 END) AS "A_21_30_jours",
     
    SUM(CASE WHEN SYSDATE BETWEEN to_date(DECVM,'YYYYMMDD') + 31 AND to_date(DECVM,'YYYYMMDD') + 40 THEN DECODE(INDCMV,'D',MTVMV,-MTVMV) ELSE 0 END) AS "A_31_40_jours",
     
    SUM(CASE WHEN SYSDATE BETWEEN to_date(DECVM,'YYYYMMDD') + 41 AND to_date(DECVM,'YYYYMMDD') + 50 THEN DECODE(INDCMV,'D',MTVMV,-MTVMV) ELSE 0 END) AS "A_41_50_jours",
     
    SUM(CASE WHEN SYSDATE > to_date(DECVM,'YYYYMMDD') + 51 THEN DECODE(INDCMV,'D',MTVMV,-MTVMV) ELSE 0 END) AS "SUP_51_jours"

  2. #2
    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
    Le type date d'Oracle contient une date avec une heure (granularité à la seconde). La fonction To_date dans votre contexte contient minuit pour la partie heure de votre date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> alter session set nls_date_format = 'DD/MM/YYYY HH24:MI:SS';
     
    Session modifiÚe.
     
    SQL> Select to_date('20100805','YYYYMMDD') a_date, sysdate sys_date
      2  from dual
      3  /
     
    A_DATE              SYS_DATE
    ------------------- -------------------
    05/08/2010 00:00:00 05/08/2010 08:56:43
     
    SQL>

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut trunc
    Salut,

    Vous pouvez aussi utiliser une opération trunc sur sysdate

    Pozzo

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci de vos réponses

    je vais essayer

    Fcap

Discussions similaires

  1. Problème de date sur HOTMAIL
    Par devdev dans le forum Internet
    Réponses: 1
    Dernier message: 07/09/2008, 19h21
  2. Problème champs date sur Oracle 9i
    Par caiman2 dans le forum SQL
    Réponses: 2
    Dernier message: 25/01/2008, 09h58
  3. Problème de pointeur sur une fonction
    Par CodeurNé dans le forum C
    Réponses: 4
    Dernier message: 03/10/2007, 22h45
  4. Réponses: 7
    Dernier message: 12/11/2006, 12h49
  5. Réponses: 16
    Dernier message: 15/05/2006, 14h49

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