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

SQL Oracle Discussion :

calcul des saisons qq soit l'année


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Par défaut calcul des saisons qq soit l'année
    Bonjour,

    j'aimerai connaitre la saison à une date donnée. j'ai un champ date, et je voudrais dire si date entre '21/12/*' et '20/03/*' alors hiver, etc...
    dans ma table cible j'ai ce champ saison que je dois alimenter grâce à la source dans laquelle se trouve le champ date.

    je ne sais pas si '*' est correct mais j'ai des dates sur plusieurs années et je veux qu'il me calcule la saison quelque soit l'année.
    je dois utiliser un case when? quelle serait la syntaxe?
    je débute sur Oracle...

    (je suis sur le designer de ODI)

    Merci!

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Bonjour,

    Tu peux essayer quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select case when sysdate between to_date('21/12/' || extract(year from sysdate)) and to_date('20/03/' || extract(year from sysdate))  then 'Hiver'
           when sysdate between to_date('21/03/' || extract(year from sysdate)) and to_date('20/06/' || extract(year from sysdate))  then 'Printemps'
           when sysdate between to_date('21/06/' || extract(year from sysdate)) and to_date('20/09/' || extract(year from sysdate))  then 'Eté'
           else 'Automne' end
    From dual

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Même idée, un peu plus simple :
    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
    28
    29
    30
    with sr as
    (
    select date '2010-03-20' as dt from dual union all
    select date '2010-03-21'       from dual union all
    select date '2010-06-20'       from dual union all
    select date '2010-06-21'       from dual union all
    select date '2010-09-20'       from dual union all
    select date '2010-09-21'       from dual union all
    select date '2010-12-20'       from dual union all
    select date '2010-12-21'       from dual
    )
      SELECT dt,
             case
               when to_char(dt, 'mmdd') not between '0321' and '1220' then 'Hiver'
               when to_char(dt, 'mmdd')     between '0321' and '0620' then 'Printemps'
               when to_char(dt, 'mmdd')     between '0621' and '0920' then 'Été'
               when to_char(dt, 'mmdd')     between '0921' and '1220' then 'Automne'
             end as saison
        FROM sr
    ORDER BY dt asc;
     
    DT		SAISON
    20/03/2010	Hiver
    21/03/2010	Printemps
    20/06/2010	Printemps
    21/06/2010	Été
    20/09/2010	Été
    21/09/2010	Automne
    20/12/2010	Automne
    21/12/2010	Hiver

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Par défaut
    Merci pour vos réponses je vais essayer ça!
    mais une question un peu bête... j'ai dans ma table source dans laquelle j'ai mes dates, et ma table cible là où j'ai mes saisons, où ets-ce que je dois coder ce que vous m'avez donné? dans sql developer? mais je dois d'abord créer le champ saison puis ensuite requêter? ou alors la requête crée le champ saison??

    je suis débutante....

  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
    Une requête affiche ce que tu veux, et tu peux utiliser un update avec un select pour ramener la ou les données

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    UPDATE table_dest A
    set (new_date, saison) 
    = (SELECT dt,
             case
               when to_char(dt, 'mmdd') NOT BETWEEN '0321' AND '1220' then 'Hiver'
               when to_char(dt, 'mmdd')     BETWEEN '0321' AND '0620' then 'Printemps'
               when to_char(dt, 'mmdd')     BETWEEN '0621' AND '0920' then 'Été'
               when to_char(dt, 'mmdd')     BETWEEN '0921' AND '1220' then 'Automne'
             end AS saison
        FROM table_source B
     where b.id = a.id
    )
    Sinon, attention, le code de spdev666 ne marche pas pour l'hiver (aucune date n'existe entre le 21/12/YYYY et le 20/03/YYYY

    Citation Envoyé par spdev666 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select case when sysdate between to_date('21/12/' || extract(year from sysdate)) and to_date('20/03/' || extract(year from sysdate))  then 'Hiver'
           when sysdate between to_date('21/03/' || extract(year from sysdate)) and to_date('20/06/' || extract(year from sysdate))  then 'Printemps'
           when sysdate between to_date('21/06/' || extract(year from sysdate)) and to_date('20/09/' || extract(year from sysdate))  then 'Eté'
           else 'Automne' end
    From dual

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Par défaut
    bonjour,

    merci pour le code, il fonctionne bien sauf pour hiver. en fait j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     case when to_char(DECES."date_deces", 'mmdd') BETWEEN '0321' AND '0620' then 'Printemps' 
    when to_char(DECES."date_deces", 'mmdd')     BETWEEN '0921' AND '1220' then 'Automne' 
    when to_char(DECES."date_deces", 'mmdd')     BETWEEN '0621' AND '0920' then 'Ete'
    else 'Hiver' 
    end
    mais l'hiver ne s'affiche pas. si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    when to_char(DECES."date_deces", 'mmdd')     BETWEEN '1221' AND '0320' then 'Hiver'
    je n'ai rien non plus. Je pense que je dois faire un between '1221' and '3112' and between '0101' and '0320' then 'hiver', mais quelle est la syntaxe exacte svp? il y a des parenthèses à mettre lorsqu'on enchaîne 2 between?

    merci!

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous avez du mal regarder, il n'y a pas de soucis :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    WITH sr AS
    (
    SELECT date '2010-01-01' AS dt FROM dual union ALL
    SELECT date '2010-03-20'       FROM dual union ALL
    SELECT date '2010-03-21'       FROM dual union ALL
    SELECT date '2010-06-20'       FROM dual union ALL
    SELECT date '2010-06-21'       FROM dual union ALL
    SELECT date '2010-09-20'       FROM dual union ALL
    SELECT date '2010-09-21'       FROM dual union ALL
    SELECT date '2010-12-20'       FROM dual union ALL
    SELECT date '2010-12-21'       FROM dual union all
    SELECT date '2010-12-31'       FROM dual
    )
      SELECT dt,
             case
               --when to_char(dt, 'mmdd') NOT BETWEEN '0321' AND '1220' then 'Hiver'
               when to_char(dt, 'mmdd')     BETWEEN '0321' AND '0620' then 'Printemps'
               when to_char(dt, 'mmdd')     BETWEEN '0621' AND '0920' then 'Été'
               when to_char(dt, 'mmdd')     BETWEEN '0921' AND '1220' then 'Automne'
               else 'Hiver'
             end AS saison
        FROM sr
    ORDER BY dt ASC;
     
    DT		SAISON
    01/01/2010	Hiver
    20/03/2010	Hiver
    21/03/2010	Printemps
    20/06/2010	Printemps
    21/06/2010	Été
    20/09/2010	Été
    21/09/2010	Automne
    20/12/2010	Automne
    21/12/2010	Hiver
    31/12/2010	Hiver

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 283
    Par défaut
    en effet, j'avais mal vu ça marche très bien! merci!!!

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

Discussions similaires

  1. [AC-2003] Calculer des cumuls de véhicules couverts sur 5 années glissantes
    Par bambi12047 dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 19/02/2013, 11h55
  2. [MCD] calcul des jours ouvrables/année
    Par wikiele dans le forum Schéma
    Réponses: 1
    Dernier message: 04/09/2011, 20h04
  3. calcul des saisons
    Par matech dans le forum Général Java
    Réponses: 9
    Dernier message: 22/02/2010, 01h15
  4. Calcul des jours feriés
    Par obione dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2003, 13h36
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 22h29

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