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 sur les dates


Sujet :

Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Problème sur les dates
    Bonjour à tous

    Hier en devant développer un système de calcul de statistiques je suis tombé devant un petit problème.

    Je dois par une requête Oracle (8i) selectionner tous les enregistrements dans la date est celle du jour - 1

    Le champ chamdate est sous le format "YYYY/MM/DD HH:MM:SS"

    J'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where champdate > {fn now()-1}
    Forcement il me prend l'heure à laquelle je lance le traitement et donc me sélectionne s'il est 15h 25, tous les enregistrements entre D-1 15h 25 et D 15h 25.

    J'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where champdate = {fn now()-1}
    Et là aussi il me prend l'heure à laquelle je lance le traitement et donc me sélectionne s'il est 15h 25, tous les enregistrements de D-1 à 15h 25

    Je souhaite prendre tout D-1 de 0h à minuit enfin un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where champdate(YYYY/MM/DD) =  NOW(YYYY/MM/DD-1)
    Si quelqu'un ou quelqu'une à la solution !

    Merci encore et bonne journée à vous tous !

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par Littlecoda
    Le champ chamdate est sous le format "YYYY/MM/DD HH:MM:SS"
    vous voulez dire que c'est un champ de type VARCHAR2 et non de type DATE ?

    Citation Envoyé par Littlecoda
    J'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where champdate > {fn now()-1}
    Que fait ????

    Citation Envoyé par Littlecoda
    Je souhaite prendre tout D-1 de 0h à minuit enfin un truc du genre
    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
    8i CYRIL> select sysdate from dual;
     
    SYSDATE
    -------------------
    07/07/2006 08:18:52
     
    1 ligne sélectionnée.
     
    8i CYRIL> select trunc(sysdate) - 1 from dual;
     
    TRUNC(SYSDATE)-1
    -------------------
    06/07/2006 00:00:00
     
    1 ligne sélectionnée.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Non non c'est bien un champ DATE

    Le problème c'est surtout que j'aimerai faire une comparaison avec deux dates sans heures alors que le champ dans la base de donnée comporte l'heure et now() renvoie la aussi l'heure

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    TO_DATE et TRUNC et voula

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai trouvé grâce à vos pistes !!!

    where trunc(champdate) = trunc(sysdate) - 1

    Ps : Ca fonctionnera ca avec un premier jours de mois ou d'année ?

    Merci pour vos réponses si rapides !!!

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par Littlecoda
    Ps : Ca fonctionnera ca avec un premier jours de mois ou d'année ?
    Le mieux, c'est encore de tester

    J'aimerais bien savoir ce que fait NOW (ça ne marche pas chez moi en 8i ou en 10gR1) ????
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut Confusion...
    Attention je pense que vous faites la confusion classique entre le type date et le format d'affichage. Un champ date ne peut pas etre "de format YYYY/MM/DD HH:MM:SS", car dans oracle, aucune information de format d'affichage n'est stockée avec les données.
    Le stockage des date-heure en oracle est à peu près le même que sous Excel, c'est à dire un nombre réel dont l'unité est le jour. A la différence près que Excel a un point zéro (30/12/1899) alors qu'il faut considérer qu'oracle n'en a pas. Avec ce principe, on comprend mieux comment ça fonctionne et pourquoi certaines oppérations ont un sens et d'autre non:

    DATE1 - DATE2 -> REEL Intervale en jours (ou fractions de jours) entre 2 dates

    DATE1 + REEL -> DATE
    DATE1 - REEL -> DATE

    DATE1 + DATE2 -> INTERDIT/AUCUN SENS (car pas de point 0 sous oracle)

    voilà pourquoi si vous soustrayez 1 à n'importe quelle DATE ça vous donnera exactement la date de la veille à la même heure. Imaginons que vous vouliez soustraire 6h (1/4 de journée), vous feriez "DATE1 - 0,25".

    Lorsqu'on veut afficher une date, un nouveau type apparait, le type CARACTERE. Mais il faut, si possible, ne faire cette conversion qu'au moment de l'affichage et pas avant. Il faut donc faire la distinction entre 3 familles de fontions:

    - Les fonctions DATE -> DATE: les TRUNC, ADD_MONTH etc... + les opérations avec les réel (comme dans les exemples plus haut)
    - Les fonctions DATE -> CARACTERE: to_char(....)
    - Les fonctions CARACTERE -> DATE : to_date(....)

    Le gros gros défaut d'oracle en la matière est qu'il tolère le mélange des types CARACTERE et DATE dans sa syntaxe, et il fait des conversions implicites dans un sens ou dans l'autre. C'est une véritable plaie parceque ça entretient la confusion et ça provoque des bugs applicatifs à la pelle bien bien pénible à dépatouiller. En particulier parceque cette conversion implicite dépend de la variable session NLS_DATE_FORMAT qui dépend de l'environnement du client.
    Ainsi vous faite votre dev, votre recette depuis chez vous, tout se passe nickel, et vous passez en production ou manque de bol les environnements sont un tantinet différent, et là patatra...

Discussions similaires

  1. Problème sur les dates
    Par serge__g dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/05/2010, 12h18
  2. Problème de condition sur les dates
    Par machipot dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/07/2007, 20h18
  3. Problème sur les dates
    Par Azeerty dans le forum Ruby on Rails
    Réponses: 12
    Dernier message: 09/07/2007, 20h36
  4. [VBA] Problème sur les dates
    Par Herman dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 11/04/2007, 11h37
  5. Problème de tri sur les dates par année puis mois
    Par rob2-9 dans le forum Access
    Réponses: 26
    Dernier message: 11/08/2006, 11h04

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