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 :

Soucis avec les comparaisons de dates


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 90
    Par défaut Soucis avec les comparaisons de dates
    Salut à tous,

    Je suis ultra-débutant en requête ORACLE et ma question risque de vous paraitre ultra basique

    J'essaye de faire un simple SELECT sur ma base avec un WHERE sur les dates.
    Voici l'extrait de ma requête qui plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM MesTables
    WHERE MesJointure...
    AND trunc(adate,'dd/mm/yyyy') BETWEEN to_date('2011-01-01', 'yyyy-mm-dd') AND to_date('2011-12-31', 'yyyy-mm-dd')
    GROUP BY ...
    ORDER BY ...
    J'ai l'erreur suivante (après avoir résolu plusieurs erreurs grace au forum) :
    Warning: oci_execute(): ORA-01898: indicateurs de précision trop nombreux in ora_sql.php on line 28
    Pouvez-vous m'aider SVP

    Note : Je ne suis pas le gestionnaire de ce serveur ou de cette base. J'y accède juste pour extraire des informations pour un site Internet type extranet.
    De la même manière, je n'ai pas le schémas de la base de données avec moi mais en cas de besoin je peux exécuter des requêtes sur la base ou le serveur.

    Merci d'avance

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Le TRUNC est faux, tu veux peut être faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trunc(adate) BETWEEN to_date('2011-01-01', 'yyyy-mm-dd') AND to_date('2011-12-31', 'yyyy-mm-dd')
    Regarde ce que fait TRUNC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> alter session set NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS';
     
    Session altered.
     
    SQL> select sysdate, trunc(sysdate) from dual;
     
    SYSDATE             TRUNC(SYSDATE)
    ------------------- -------------------
    26/11/2011 20:05:20 26/11/2011 00:00:00
     
    SQL>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 90
    Par défaut
    Salut,

    Merci pour ta réponse
    Je ne sais pas pourquoi mais depuis ce matin je n'ai plus d'erreur qui remonte depuis le serveur même avec l'ancien code !!

    Merci encore !

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je dirai même que le trunc est très probablement inutile et même probablement coûteux car il tue l'utilisation éventuelle d'index / partitions.
    Avec une simple réécriture, on s'en passe très bien.

    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    adate BETWEEN to_date('2011-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
              AND to_date('2011-12-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        adate >= to_date('2011-01-01', 'yyyy-mm-dd')
    AND adate <  to_date('2012-01-01', 'yyyy-mm-dd')
    -- Équivalent à :
        adate >= date '2011-01-01'
    AND adate <  date '2012-01-01'

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 90
    Par défaut
    Salut,

    J'essayerai sans le trunc alors... Si ça peut améliorer ma requête !

    Merci Waldar

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

Discussions similaires

  1. Un petit souci avec les dates
    Par Ben-o dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 27/09/2007, 18h42
  2. [Dates] souci avec les dates
    Par Ludo75 dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2006, 17h15
  3. souci avec une comparaison de date
    Par Ludo75 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 20/02/2006, 15h59
  4. Réponses: 7
    Dernier message: 05/10/2004, 13h44

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