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 :

Problème avec BETWEEN DATE


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut Problème avec BETWEEN DATE
    Bonjour ;
    j'ai les 2 requêtes suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT * FROM MYVIEW WHERE STATUS = 4 
    AND ID IN (SELECT ID FROM MYTABLE 
    WHERE CATSEARCH(DESCRIPTION,'photo*',NULL)>0) 
    AND LANG='FR' 
    AND (LASTUPDATE BETWEEN TO_DATE('01/10/2011','DD/MM/YYYY') 
    AND TO_DATE('10/12/2011','DD/MM/YYYY')) AND ROWNUM<50
     
     
     
    SELECT * FROM MYVIEW WHERE STATUS = 4 
    AND ID IN (SELECT ID FROM MYTABLE
     WHERE CATSEARCH(DESCRIPTION,'photo*',NULL)>0) 
     AND LANG='FR' 
     AND (LASTUPDATE BETWEEN TO_DATE('01/11/2011','DD/MM/YYYY') 
    AND TO_DATE('10/12/2011','DD/MM/YYYY')) AND ROWNUM<50
    ce que je trouve absurde c'est que la première retourne 0 résultat
    la deuxième 50 résultats alors que l'intervalle de date de la première(entre le 01/10/2011 et le 10/12/2011) englobe le deuxième (entre le 01/11/2011 et le 10/12/2011)!!
    Une idée?
    Merci d'avance.

  2. #2
    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
    Essayez comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT *
      FROM
    (
    SELECT rownum as rn, mv.*
      FROM MYVIEW mv
     WHERE STATUS = 4 
       AND ID IN (SELECT ID
                    FROM MYTABLE 
                   WHERE CATSEARCH(DESCRIPTION, 'photo*', NULL) > 0) 
       AND LANG = 'FR' 
       AND LASTUPDATE BETWEEN TO_DATE('01/10/2011','DD/MM/YYYY') 
                          AND TO_DATE('10/12/2011','DD/MM/YYYY')
    )
     WHERE rn < 50

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut
    Bonjour;
    Ça marche bien mais franchement j'ai pas compris le problème.

  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
    Vous êtes en quelle version d'Oracle Database ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut
    Oracle 10 g

  6. #6
    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
    Il semblerait qu'Oracle ait appliqué le rownum <= 50 avant les autres filtres.

    Il a pris 50 lignes au hasard, dans le premier cas aucune ne correspondait aux autres filtres, dans le second il a eu plus de chance.

    Avec la requête que je vous ai fournie il n'y a pas d’ambiguïté.

  7. #7
    Expert confirmé 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
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Il semblerait qu'Oracle ait appliqué le rownum <= 50 avant les autres filtres.

    Il a pris 50 lignes au hasard, dans le premier cas aucune ne correspondait aux autres filtres, dans le second il a eu plus de chance.

    Avec la requête que je vous ai fournie il n'y a pas d’ambiguïté.
    Je ne pense pas !
    1) Le rownum est attribué aux enregistrements qui passent les filtres
    2) Dans des conditions bien déterminées de température, pression et autres facteurs Oracle transforme la requête comme bon lui semble

  8. #8
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par man_nou Voir le message
    Bonjour ;
    j'ai les 2 requêtes suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT * FROM MYVIEW WHERE STATUS = 4 
    AND ID IN (SELECT ID FROM MYTABLE 
    WHERE CATSEARCH(DESCRIPTION,'photo*',NULL)>0) 
    AND LANG='FR' 
    AND (LASTUPDATE BETWEEN TO_DATE('01/10/2011','DD/MM/YYYY') 
    AND TO_DATE('10/12/2011','DD/MM/YYYY')) AND ROWNUM<50
     
     
     
    SELECT * FROM MYVIEW WHERE STATUS = 4 
    AND ID IN (SELECT ID FROM MYTABLE
     WHERE CATSEARCH(DESCRIPTION,'photo*',NULL)>0) 
     AND LANG='FR' 
     AND (LASTUPDATE BETWEEN TO_DATE('01/11/2011','DD/MM/YYYY') 
    AND TO_DATE('10/12/2011','DD/MM/YYYY')) AND ROWNUM<50
    ce que je trouve absurde c'est que la première retourne 0 résultat
    la deuxième 50 résultats alors que l'intervalle de date de la première(entre le 01/10/2011 et le 10/12/2011) englobe le deuxième (entre le 01/11/2011 et le 10/12/2011)!!
    Une idée?
    Merci d'avance.
    Pourriez-vous s'il vous plaît poster les deux plans d'exécution des deux requêtes. Il suffit d'exécuter après chaque requête ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from table(dbms_xplan.display_cursor);
    On verra par la suite si un 10053 ''trace file'' s'impose ou pas.

  9. #9
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Par défaut
    Bonjour,

    Quel est SVP le type du champ LASTUPDATE de votre table MYTABLE ?

    Est-ce bien un type DATE ?

    Je me demande en effet si ce ne serait pas un CHAR ou un VARCHAR, et il y aurait donc à ce moment là une conversion implicite de vos dates en chaînes de caractères.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut
    @Mohamed.Houri j'ai pas les privilèges requis
    @rouardg le champ LASTUPDATE est bien de type DATE

Discussions similaires

  1. problème avec between date
    Par jeanpierre215 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/09/2010, 17h58
  2. problème avec les dates nulles
    Par shingo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/09/2005, 12h32
  3. probléme avec une date/string dans un CommandText
    Par critok dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/02/2005, 15h30
  4. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18
  5. Interbase - dbExpress -> problème avec les dates
    Par marghett dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/07/2004, 03h55

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