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

Langage SQL Discussion :

Question sur le BETWEEN d'Oracle


Sujet :

Langage SQL

  1. #1
    Membre Expert
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Par défaut [Résolu] Question sur le BETWEEN d'Oracle
    Bonjour !

    Bon voilà, en fait j'ai pour coutume d'écrire le Between comme ça vient.
    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaDate Between #19/10/2003# AND #10/10/2003#
    Il y a peu on m'a repris en me disant qu'il fallait mieux mettre la plus petite date devant, car c'est plus rapide ...

    Moi je veux bien ... mais j'aimerai aussi comprendre pourquoi ? Car ça me semble un peu tordu ...

    Je n'utilise que des petites base et ne peut donc pas mesurer serieusement la rapidité.

    Si jamais qqun pouvait me répondre ça serait sympa car je n'en dors plus !!!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 10
    Par défaut
    le Between c'est l'équivalent d'un intervalle avec une borne min et une borne max c'est à dire c'est comme si tu écris :

    #19/10/2003# <= LaDate <= #10/10/2003#
    et il est fort probable que ta requête ne ramène rien, la synthaxe veut que tu ecrives ton between de la façon suivante :

    LaDate Between <date1> AND <date2> avec date2 > date1
    , attention les heures, minutes et secondes jouent un rôle important, si besoin utilise un format de date ou fait un trunc !

  3. #3
    Membre Expert
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Par défaut
    sisi ça marche dans les deux sens.

    Je me demande juste si une des deux façon est plus performante ...
    Donc si jamais qqun a déjà fait des testes, par curiosité j'aimerai bien en connaître els résultats

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2003
    Messages : 17
    Par défaut
    C'est une très bonne question, moi j'ai toujours écrit mes between avec la date la plus petite en premier et ensuite la date la plus élevée ( je n'avais jamais pensé que l'inverse fonctionnais aussi ).
    Ensuite pour les perfs tout va peut etre dépendre de tes indexs.
    Une étude plus appronfondie serais très intéressante.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 10
    Par défaut
    Moi j'ai essayé sur une table ça me ramène rien (et dans l'ordre requis j'ai 11 rows), je prends juste :
    Vdate between sysate and sysdate - 4
    , par contre je n'utilise pas de format date spécifique peut être que cela à une influence, en tout cas en respectant l'ordre je pense que c'est bcp plus rigoureux et que l'on ne perd pas d'informations ...

  6. #6
    Membre Expert
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Par défaut
    Je viens à l'instant de lancer ces 2 types de between sur respectivement Access et MySQL, ça marche très bien.
    Qu'utilises-tu pour que celà ne fonctionne pas ?
    (j'ai utilisé le format date de mon premier message)

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 462
    Par défaut
    Il y a déjà Oracle sur lequel votre syntaxe farfelue ne ramène rien.
    La doc Oracle indique en toutes lettres que le premier argument représente la borne inférieure de l'intervalle, et le second argument est la borne supérieure.

    J'ignore ce que dit la norme SQL à ce sujet, mais il est certain qu'en utilisant BETWEEN de manière normale, vous passerez sur tous les SGBD sans problème.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 10
    Par défaut
    J'ai utilisé une première requête sans format spécifique sur les dates sur une table quelconque (bien sur j'ai vérifié qu'il y a bien des données pour les dates requises) :

    1) dat_entree between (sysdate - 26) and (sysdate - 17) --> 40 rows selected
    2) dat_entree between (sysdate - 17) and (sysdate - 26) --> no rows selected


    1bis) dat_entree between to_date('10/04/2003', 'dd/mm/yyyy') and to_date('19/04/2003', 'dd/mm/yyyy') --> 45 rows selected (écart qui s'explique du fait que je ne suis pas rigoureux sur le format, mais bon le but n'est pas là c'est de monter que dans les 2 cas on ramène des enregistrements... en faisant par exemple un trunc sur dat_entree j'obtiens bien 40 rows)
    2bis) dat_entree between to_date('10/04/2003', 'dd/mm/yyyy') and to_date('19/04/2003', 'dd/mm/yyyy') avec ou sans trunc sur la dat_entree --> no rows selected

    Donc pour moi c'est pas fiable !!!

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 10
    Par défaut
    Au final je pense qu'il faut respecter la syntaxe du langage SQL sous Oracle !

    A+

  10. #10
    Membre Expert
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Par défaut
    Yep !

    Merci à tous d'avoir fais vos testes, je suis fixé maintenant

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

Discussions similaires

  1. Question sur la connection JAVA Oracle
    Par Invité dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 17/07/2013, 21h47
  2. Questions sur l'imp/exp oracle
    Par Kiroukool dans le forum Import/Export
    Réponses: 9
    Dernier message: 31/01/2008, 14h04
  3. Questions sur les rêquetes sql oracle?
    Par naima2005 dans le forum SQL
    Réponses: 6
    Dernier message: 24/12/2007, 13h57
  4. question sur requete oracle?
    Par root76 dans le forum Oracle
    Réponses: 1
    Dernier message: 11/10/2006, 16h58
  5. [ORACLE 9i] Question sur le cascade constraints
    Par Misdrhaal dans le forum Oracle
    Réponses: 5
    Dernier message: 16/05/2006, 11h09

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