1. #1
    Membre habitué
    Avatar de Oncle_Pete
    Profil pro
    Inscrit en
    avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : avril 2006
    Messages : 237
    Points : 173
    Points
    173

    Par défaut Compatibilité champ date avec le format semaine annuelle

    Bonjour,


    Je galère comme pas possible pour essayer d'affecter le format 'YYYY-IW' à 2 variables de type DATE afin d’être comparées.
    J'obtiens le message Oracle "ORA-01820: format code cannot appear in date input format"

    Pourtant l'aide en ligne de la fonction TO_DATE donne bien ce format comme "compatible"
    Merci pour votre aide

    Oncle Pete
    Experience is the best teacher !!

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    juillet 2003
    Messages
    4 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : juillet 2003
    Messages : 4 005
    Points : 6 278
    Points
    6 278
    Billets dans le blog
    3

    Par défaut

    Un type Date est une date (Oracle stocke jour, mois, année, heure, minute, seconde)

    To_Date : Prend en paramètre un Type Varchar2 et renvoie un type Date
    To_Char : Prend en paramètre un Type Date et renvoie un type Varchar2

    Le format IW n'est que de l'affichage à partir d'une date (TO_CHAR) , tu ne peux pas dire : Donne moi le jour de la semaine 3 de 2017.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT TO_DATE('02/2017', 'IW/RRRR') FROM dual
    ORA-01820: format code cannot appear IN date input format
     
     
    SELECT TO_CHAR(SYSDATE, 'IW/RRRR') FROM dual
    TO_CHAR
    -------
    24/2017
    1 row selected.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB

  3. #3
    Membre habitué
    Avatar de Oncle_Pete
    Profil pro
    Inscrit en
    avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : avril 2006
    Messages : 237
    Points : 173
    Points
    173

    Par défaut

    Merci McM pour ta réponse

    Je suis bien d'accord avec la syntaxe des 2 fonctions.
    Est ce à dire qu'il n'est pas possible d'affecter le format 'YYYY-IW' à 2 variables, puis de les transformer en date pour les comparer ?
    Autrement dit, avec ce format, on ne peut comparer que 2 chaines de caractères (pas glop ca non ?)
    Dans mon cas, j'ai une variable du type 20170612 en varchar2(8) à laquelle je dois soustraire 21 jour puis la transformer en n° de semaine de l'année et voir si c'est plus petit que la semaine actuelle

    Oncle Pete
    Experience is the best teacher !!

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    juillet 2003
    Messages
    4 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : juillet 2003
    Messages : 4 005
    Points : 6 278
    Points
    6 278
    Billets dans le blog
    3

    Par défaut

    IW c'est une indication de semaine, c'est comme le format DDD qu te donne le nombre de jours depuis le début de l'année, ou le SSSS qui te donne le nombre de secondes depuis minuit. Ce n'est pas une information de date.

    Pour comparer ce genre de données, il faut effectuer la transformation des 2 côtés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_CHAR(TO_DATE('20170612', 'YYYYMMDD'), 'IW') < TO_CHAR(SYSDATE, 'IW')
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB

  5. #5
    Membre habitué
    Avatar de Oncle_Pete
    Profil pro
    Inscrit en
    avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : avril 2006
    Messages : 237
    Points : 173
    Points
    173

    Par défaut

    Compris McM


    Mon problème est d'avoir pensé qu'un format semaine était compatible avec un format date.
    Sur ce type d'indication (semaine), je vais donc rester sur une comparaison entre 2 chaines de caractères
    Merci encore à toi

    Oncle Pete
    Experience is the best teacher !!

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    7 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 7 427
    Points : 15 706
    Points
    15 706

    Par défaut

    Citation Envoyé par Oncle_Pete Voir le message
    Je galère comme pas possible pour essayer d'affecter le format 'YYYY-IW' à 2 variables de type DATE afin d’être comparées.
    J'ajoute une précision supplémentaire pour vous éviter d'éventuels bogues, le format IW de la semaine se combine avec le format IYYY de l'année.
    Ça permet de gérer les semaines à cheval sur deux années différentes :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    with cte_cal (dt_jour) as
    (
      select date '2009-12-27' + level
        from dual
    connect by level <= 7
    )
    select dt_jour
         , to_char(dt_jour, 'yyyy-ww') as "YYYY-WW"
         , to_char(dt_jour, 'yyyy-iw') as "YYYY-IW"
         , to_char(dt_jour, 'iyyy-ww') as "IYYY-WW"
         , to_char(dt_jour, 'iyyy-iw') as "IYYY-IW"
      from cte_cal
     order by dt_jour asc;
     
     
    DT_JOUR    YYYY-WW YYYY-IW IYYY-WW IYYY-IW
    ---------- ------- ------- ------- -------
    2009-12-28 2009-52 2009-53 2009-52 2009-53
    2009-12-29 2009-52 2009-53 2009-52 2009-53
    2009-12-30 2009-52 2009-53 2009-52 2009-53
    2009-12-31 2009-53 2009-53 2009-53 2009-53
    2010-01-01 2010-01 2010-53 2009-01 2009-53
    2010-01-02 2010-01 2010-53 2009-01 2009-53
    2010-01-03 2010-01 2010-53 2009-01 2009-53

  7. #7
    Membre habitué
    Avatar de Oncle_Pete
    Profil pro
    Inscrit en
    avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : avril 2006
    Messages : 237
    Points : 173
    Points
    173

    Par défaut

    Merci Waldar pour ce complément d'infos bien utile

    Ce matin dans mes recherches je suis tombé sur ce format me demandant quelles différences pouvaient bien exister entre IW et WW.

    Ce soir j'ai la réponse

    Super. Merci encore

    Oncle Pete
    Experience is the best teacher !!

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

Discussions similaires

  1. [Dates] Champs date avec slash
    Par bahaaldine dans le forum Fonctions
    Réponses: 1
    Dernier message: 21/02/2007, 08h28
  2. [Debutant] Afficher une date avec un format short
    Par lilou77 dans le forum BIRT
    Réponses: 12
    Dernier message: 11/01/2007, 09h25
  3. Requette sur date avec regroupement par semaine
    Par bob75000 dans le forum Access
    Réponses: 6
    Dernier message: 17/07/2006, 15h39
  4. Parser une date avec un format
    Par titoine1978 dans le forum C++
    Réponses: 15
    Dernier message: 03/04/2006, 11h46
  5. composant de calcul [champ date] avec rave report
    Par segnac dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/06/2005, 19h08

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