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] obtenir numero du mois à partir d'un numero de semaine


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [oracle] obtenir numero du mois à partir d'un numero de semaine
    je sais que c'est pas trés clair
    mais j'ai besoin de savoir comment obtenir le numero de mois à partir
    du numéro semaine

    j'ai une table qui contient le numéro de l'année(ex: 2000), le numéro de semaine(ex: 1-53) et le numéro de jour dans le mois(ex: 1-31)

    ma table ne contient pas de numero de mois(ex: 1-12) et je voudrais a terme pouvoir créer des dates mais sans le numero de mois c'est un peu compliqué

    me demander pas pourquoi j'ai pas de numero de mois...
    c'est imposé :\

    merci pour tous ceux qui se seront donner la peine de lire mes anêries

  2. #2
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Salut,
    va voir cette discussion
    [Résolu] Numero de semaine -> date debut, date fin
    qui donne une solution pour récupérer les dates de début et de fin d'une semaine selon son année et son No.

    plus précisément ce Select :
    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
    SELECT 
            greatest(trunc(to_date(y||'-01-01','RRRR-MM-DD'),'IW')+(
                                                                    Case When
                                                                            trim(to_char(to_date(y||'-01-01','RRRR-MM-DD'),'Day','nls_date_language=french')) NOT IN ('Samedi', 'Dimanche')
                                                                         Then
                                                                            w
                                                                         Else 
                                                                            w +1
                                                                    End -1)*7,trunc(to_date(y||'-01-01','RRRR-MM-DD'),'IW')) AS "Lundi"
            , trunc(to_date(y||'-01-01','RRRR-MM-DD'),'IW')+6+(
                                                                Case When
                                                                        trim(to_char(to_date(y||'-01-01','RRRR-MM-DD'),'Day','nls_date_language=french')) NOT IN ('Samedi', 'Dimanche')
                                                                     Then
                                                                        w
                                                                     Else 
                                                                        w +1
                                                                End -1)*7                                                   AS "Dimanche" 
    FROM 
            (SELECT &year y, &week w FROM dual) ;
    à partir de cette information, tu pourras facilement extraire la partie de la date qui t'intéresse...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    merci
    mais c'est du charabia ton truc

    j'ai jamais vu de tel instruction dans un select
    vais essayer de comprendre mnt

  4. #4
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Salut,
    alors voici l'explication (accroche-toi, c'est pas évident à formuler comme ça) :

    En premier lieux il y a 2 paramètres dans ce select, situés ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    From 
            (select &year y, &week w from dual);
    - &year où tu donnes l'année à traiter
    - &week où tu donnes le no de semaine à traiter


    partant de ça, pour trouver le premier jour (le lundi), on fait :
    d'abord on ramène le premier jour de la semaine (fonction trunc avec le format 'IW') qui contient le 1er janvier de l'année voulue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trunc(to_date(y||'-01-01','RRRR-MM-DD'),'IW')
    puis on AJOUTE 7 x (pour 7 jours => donc 1 semaine) le no de la semaine voulue OU le no de la semaine PLUS 1, dépendant si l'année à commencé un samedi ou dimanche (la semaine 1 est la première semaine qui contient un lundi, un CASE WHEN est à lire comme un IF).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Case When
            trim(to_char(to_date(y||'-01-01','RRRR-MM-DD'),'Day','nls_date_language=french')) Not in ('Samedi', 'Dimanche')
         Then
            w
         Else 
            w +1
    End -1)*7
    et finalement on va chercher la date la plus grande (fonction greatest) entre le calcul ci-dessus et le premier jour de la semaine du 1er janvier (pour le cas où on traite la semaine 1 et que le lundi soit encore l'année précédente)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    greatest(
                    ...tout le calcul précédent...
                    ,trunc(to_date(y||'-01-01','RRRR-MM-DD'),'IW')
            ) as "Lundi"
    Pour le Dimanche le principe est quasiment identique :
    d'abord on ramène le premier jour de la semaine + 6 (fonction trunc avec le format 'IW') qui contient le 1er janvier de l'année voulue pour arriver au dimanche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trunc(to_date(y||'-01-01','RRRR-MM-DD'),'IW') + 6
    auquel on ajoute également 7 x le no de la semaine ou le no de la semaine + 1, selon que le 1er janvier ait été un samedi ou un dimanche ou non (calcul identique à précédement).

    voilà, c'est tout... j'espère que ça t'aidera...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Points : 409
    Points
    409
    Par défaut
    ... et pourquoi pas simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TO_char ( to_date('01/01/2007','DD/MM/RRRR')+ ((&semaine-1) *7),'MM' ) 
    from dual

    CDLT.

  6. #6
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    salut,
    va voir le Post que je mentionne dans le 2ème message...
    c'est nettement plus développé.
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    merci infiniment pour m'avoir aider

  8. #8
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    @taska
    de plus, avec ton Select, comment gères-tu les semaines qui chevauchent deux mois (semaine 5 => lundi 29.01.2007 / dimanche 04.02.2007) ?
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

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

Discussions similaires

  1. Trouver un mois à partir d'un numéro de semaine et de l'année
    Par patbeautifulday dans le forum Contribuez
    Réponses: 2
    Dernier message: 27/05/2015, 10h59
  2. Réponses: 15
    Dernier message: 24/04/2014, 09h58
  3. Réponses: 6
    Dernier message: 01/03/2007, 13h57
  4. [VB.Net] Obtenir une date à partir d'un numero de semaine
    Par tonysky dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/01/2007, 08h57
  5. Obtenir le MCD a partir d'une BDD Oracle, possible?
    Par dipajero dans le forum Designer
    Réponses: 7
    Dernier message: 06/01/2006, 20h48

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