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 :

[Oracle] Dates : Fonction TO_DATE


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut [Oracle] Dates : Fonction TO_DATE
    Bonjour !

    Je souhaite obtenir chaque jour la liste des produits modifiés la veille :

    Pour aujourd'hui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select *  from produits 
     where date_modif  BETWEEN 
     to_date('09/08/2006', 'dd/MM/yyyy')  
     and to_date ('10/08/2006', 'dd/MM/yyyy')
    Le probleme de cette requete c'est qu'en fonction de l'heure à laquelle je l'exécute, je n'ai pas le meme nombre de résultats car il prend en compte les modifs du 10 aout.

    Je voudrais donc n'extraire que e 9 aout. J4ai donc pensé à faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select *  from produits 
     where date_modif  BETWEEN 
     to_date('09/08/2006 00:00:00', 'dd/MM/yyyy hh24:mi:ss')  
     and to_date ('09/08/2006 23:59:59', 'dd/MM/yyyy hh24:mi:ss')
    Mais j'obtiens les memes résultats que la première requête !!!!
    Par exemple j'ai un produit avec date_modif = 2006-08-10 10:06:34.0

    Cela viendrait-il du dernier "0" ??..

    Qqun peut il m'aider ?

    Merci !!

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SCOTT@LSC01> with produits as (
    select to_date('2006-08-10 10:06:34','YYYY-MM-DD HH24:MI:SS') date_modif, 1 produit from dual 
    union select to_date('2006-08-09 12:00:00','YYYY-MM-DD HH24:MI:SS'),2 from dual)
      2  select *  from produits
      3   where date_modif  BETWEEN
      4   to_date('09/08/2006 00:00:00', 'dd/MM/yyyy hh24:mi:ss')
      5*  and to_date ('09/08/2006 23:59:59', 'dd/MM/yyyy hh24:mi:ss')
    DATE_MODIF             PRODUIT
    ------------------- ----------
    09.08.2006 12:00:00          2
    ta requête me semble correcte.
    tu es sur que date_modif est une date?

  3. #3
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Points : 166
    Points
    166
    Par défaut
    essaye :
    select * from produits
    where to_char(date_modif,'dd/MM/yyyy') = '09/08/2006'

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Oraman
    essaye :
    select * from produits
    where to_char(date_modif,'dd/MM/yyyy') = '09/08/2006'
    ce qui est équivalent à ma requête, sauf que la tienne ne peut employer un index sur date_modif

  5. #5
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Points : 166
    Points
    166
    Par défaut
    Exact.
    je voulais éviter de faire des comparaison dur les dates et sutout ne pas prendre en considération les heures et les minutes.
    par contre un index fonction peut être utiliser dans ce cas

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Oraman
    Exact.
    je voulais éviter de faire des comparaison dur les dates et sutout ne pas prendre en considération les heures et les minutes.
    par contre un index fonction peut être utiliser dans ce cas
    par rapport aux minutes, je suis d'ac.

    il est plus élégant d'écrire avec >= et < qu'avec between

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where date_modif >= date '2006-08-09' and date_modif < date '2006-08-10'
    de plus, ceci marche quelque soit le type de date_modif. Si date_modif est un timestamp, le between ne convient pas...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    merci à tous.

    date_modif est bien une date.

    j'ai remplacé le between par les operateurs >= et <= mais cela ne change rien du tout

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    surveille ton clavier, respire et bon coup, et recommence

    si tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where date_modif between d1 and d2
    et que tu recois des lignes avec date_modif>d2, c'est qu'il y a sans doute une autre partie de la requête qui cloche...

    essaye de nous donner l'output dans sqlplus de ta requête, qui a l'air tout a fait correcte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select * from (
    select date_modif  from produits 
     where date_modif  BETWEEN 
     to_date('09/08/2006 00:00:00', 'dd/MM/yyyy hh24:mi:ss')  
     and to_date ('09/08/2006 23:59:59', 'dd/MM/yyyy hh24:mi:ss') 
    order by date_modif desc ) where rownum<5;

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    Ma requête comportait une jointure (je l'avais simplifiée) ...
    Donc c tout bon, ça marche, je suis désolée de vous avoir embeté

    Merci à tous !!!

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

Discussions similaires

  1. Une fonction Oracle,date
    Par samah1990 dans le forum Oracle
    Réponses: 1
    Dernier message: 06/03/2013, 09h11
  2. fonction to_date??
    Par Anonymous dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/09/2007, 14h41
  3. [Oracle] Fonction to_date
    Par Run_974 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 16/08/2007, 17h16
  4. Réponses: 3
    Dernier message: 18/10/2005, 15h34
  5. Réponses: 8
    Dernier message: 05/05/2004, 12h30

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