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 :

Créer date depuis Année/Semaine/JourSem


Sujet :

Oracle

  1. #1
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut Créer date depuis Année/Semaine/JourSem
    Bonjour à tous,

    Je souhaiterais obtenir une date à partir d'une année, d'un numéro de semaine dans l'année et d'un numéro de jour dans la semaine.

    Exemple :
    Le 1er jour de la semaine 47 de l'année 2006 est le Lundi 20 novembre 2006.

    J'ai essayé :
    select to_date ('1-47-2006', 'D-WW-YYYY') from dual;
    mais j'ai obtenu l'erreur ORA-01820: le code du format ne peut pas apparaître dans le format d'entrée de la date

    Si quelqu'un à une idée sous oracle 9i ...

  2. #2
    Membre Expert

    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
    Par défaut
    Ce qu'il y d'étonnant c'est que votre masque de format est correct puisque dans ce sens cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    10g SOC5> select to_char(sysdate, 'D WW YY')
      2* from dual
     
    TO_CHAR
    -------
    4 47 06
     
    1 ligne sélectionnée.
    Pour information :
    ORA-01820: format code cannot appear in date input format
    Cause: A date specification contained an invalid format code. Only the following may be specified when entering a date: year, month, day, hours, minutes, seconds, Julian day, A.M./P.M. and B.C./A.D.
    Action: Remove the invalid format code from the date specification.
    PS : merci de penser aux balises de mise en forme

  3. #3
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Pour transformer une date en chaine de caractères c'est OK.
    Mon problème est inverse, c'est à dire qu'il faut que je transforme des nombres (N° année, N° semaine de l'année, N° jour de la semaine) pour obtenir une date

  4. #4
    Membre Expert

    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
    Par défaut
    J'avais bien compris mais le libellé du message d'erreur semble indiquer que vous ne pouvez pas constituer une date avec le masque de format que vous spécifiez.
    Les options 'D' et 'WW' ne semblent pas faire partie de celles que vous pouvez utiliser avec TO_DATE.

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    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 580
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TRUNC(TO_DATE('2006', 'YYYY'), 'YYYY') + 46 * 7 + 1
    FROM dual
    Attention aux semaines IW et WW
    Les IW c'est fonction du calendrier (la semaine n° 1 est celle qui contient le 1er jeudi)
    Les WW c'est du 01/01 au 07/01 puis du 08/01 au 14/01, etc...

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    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 580
    Billets dans le blog
    4
    Par défaut
    Voici ce que j'avais fait avec les semaines ISO
    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
    25
    26
    27
    PROCEDURE P_SEMAINE (p_semaine IN NUMBER, p_annee IN NUMBER, 
    			p_datedeb OUT DATE, p_datefin OUT DATE)
    IS
    -- p_semaine : n° semaine ISO
    -- p_annee : Année
    -- p_datedeb : Date du premier jour de la semaine
    -- p_datefin : Date du dernier jour de la semaine
    	v_debannee DATE := TRUNC(TO_DATE(p_annee, 'YYYY'), 'YYYY');
    BEGIN
     
    	IF p_semaine IS NOT NULL
    	THEN
    		IF v_debannee IS NULL 
    		THEN	v_debannee := TRUNC(SYSDATE, 'YYYY');
    		END IF;
     
    		-- Cas normal (1er jour = LMMJ = Première Semaine) 
    		-- Sinon on rajoute 3 jour (VSD => LMMJ (Premiere semaine commence au lundi suivant))
    		SELECT TRUNC(v_debannee + DECODE( TO_NUMBER(TO_CHAR(v_debannee, 'IW')), 1, 0, 3)	
    				,'IW') + (p_semaine-1)*7 AS deb,
    			 TRUNC(v_debannee + DECODE( TO_NUMBER(TO_CHAR(v_debannee, 'IW')), 1, 0, 3)	
    				,'IW') + p_semaine * 7 - 1 AS fin
    		INTO p_datedeb, p_datefin
    		FROM DUAL;
     
    	END IF;
    END;

  7. #7
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Citation Envoyé par McM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TRUNC(TO_DATE('2006', 'YYYY'), 'YYYY') + 46 * 7 + 1
    FROM dual
    Attention aux semaines IW et WW
    Les IW c'est fonction du calendrier (la semaine n° 1 est celle qui contient le 1er jeudi)
    Les WW c'est du 01/01 au 07/01 puis du 08/01 au 14/01, etc...
    Cela ne semble pas fonctionner pour l'année 2010

  8. #8
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    A mon avis, Oracle doit forcément posséder une table système contenant toutes les dates, avec leur N° de jour dans l'année, leur N° de jour dans la semaine, ....
    En fait tout ce que Oracle est capable de ramener lorsqu'on fait un to_char(sysdate, ???)

  9. #9
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    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 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par milka
    A mon avis, Oracle doit forcément posséder une table système contenant toutes les dates, avec leur N° de jour dans l'année, leur N° de jour dans la semaine, ....
    En fait tout ce que Oracle est capable de ramener lorsqu'on fait un to_char(sysdate, ???)
    Non, il existe des algorithmes de calendriers perpetuels, je ne pense pas qu'oracle ait une table avec toutes les dates.

Discussions similaires

  1. [2008R2] Problème de date en année / semaine
    Par softeur dans le forum Développement
    Réponses: 3
    Dernier message: 08/11/2014, 15h18
  2. Réponses: 9
    Dernier message: 21/07/2010, 08h43
  3. Conversion Année Semaine NumJour en date
    Par filou941 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 22/09/2009, 18h50
  4. Réponses: 8
    Dernier message: 29/09/2006, 18h09
  5. [Dates] numéro année + numéro semaine
    Par auduma dans le forum Langage
    Réponses: 3
    Dernier message: 10/01/2006, 11h58

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