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

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 4
    Points
    4
    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 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    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
    Candidat au Club
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 4
    Points
    4
    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 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Vous êtes en quelle version d'Oracle Database ?

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 4
    Points
    4
    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 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    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 é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
    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 averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par mnitu Voir le message
    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
    En effet,
    J'ai déjà eu qq problème avec ce fameux ROWNUM d'ORACLE. (ORA 11g)
    Il faut vraiment s'en méfier, la valeur renvoyée rownum=1 est vide pour une requête simple.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT col1 from tab1 where rownum < 2 order by col1;

    http://www.developpez.net/forums/d89...obleme-rownum/

  9. #9
    Membre expérimenté

    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
    Points : 1 359
    Points
    1 359
    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.

  10. #10
    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
    Points : 926
    Points
    926
    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.

  11. #11
    Candidat au Club
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 4
    Points
    4
    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, 18h58
  2. problème avec les dates nulles
    Par shingo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/09/2005, 13h32
  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, 16h30
  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, 10h18
  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, 04h55

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