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 :

soustraction de deux dates au format année+semaine sous Oracle


Sujet :

Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut soustraction de deux dates au format année+semaine sous Oracle
    J'ai dans la base de données (oracle) deux champs de type varchar qui contiennent des dates au format YYYYWW. Je souhaite soustraire ces 2 dates afin d'obtenir l'écart entre les 2, en nombre de semaines.

    exemple : '200704' - '200653'=4

    Est-ce que quelqu'un aurait une idée ?

  2. #2
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    quelque chose me choque dans ton exemple, n'y aurait il pas que 52 semaines dans une année?

    Sinon si on note ta date la plus récente avec un 2 et la plus ancienne avec un 1

    j'aurais bien tenté:

    (Année2 - Année1)*52 + (Semaine2 - Semaine1)

    Mais bon çà m'a l'air d'être bon, mais j'ai pas vérifié en détail. Sinon selon ta version d'oracle tu peux lorgner du coté des timestamp et interval pour te faciliter la vie.

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

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Faudrait repasser tes dates au format jour, faire la différence et diviser par 7

    '200704' et '200653'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    v_dte1 := to_date('01012007', 'DDMMYYYY') + 7 * (to_number('04')-1);
    v_dte2 := to_date('01012006', 'DDMMYYYY') + 7 * (to_number('53')-1);
    v_nb_sem := TRUNC((v_dte1 - v_dte2) / 7);
    Pour le TRUNC je suis pas sur, faut tester

  4. #4
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Au passage, le calcul de McM et le mien avec les valeurs de départ nous donnent 3 au lieu de 4, Oracle et calc.exe nous prouve donc si besoin est qu'il y a effectivement 52 semaines dans l'année

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 142
    Points : 170
    Points
    170
    Par défaut
    C'est un peu plus complexe il y a 2 formats semaine dans ORACLE. Le format iso (IW) ou WW.

    De mémoire si le 1er janvier est un jeudi ou après alors la semaine 1 est la semaine du premier lundi de l'année,
    si le 1er janvier est un mercredi ou avant la semaine 1 est la semaine du 1er janvier. Avec ce format il est possible d'avoir 53 semaines dans une année.


    En format WW la semaine 1 commence le 1er janvier si par example le 1er janvier est un mardi toute les semaines commence un mardi.

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    bien étrange quand même d'avoir une année qui commence la 52e semaine et fini la 1ère semaine, non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select to_char(date '2012-01-01','IW'), 
           to_char(date '2012-12-31','IW')
    from dual;
     
    TO TO
    -- --
    52 01
    pour la question, il faut savoir ce que l'on entend par semaine, est-ce en fonction du lundi? est-ce un groupe de 7 jours commencant n'importe quel jour? combien de semaine y a-t-il dans 11 jours?

  7. #7
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par laurentschneider
    pour la question, il faut savoir ce que l'on entend par semaine, est-ce en fonction du lundi? est-ce un groupe de 7 jours commencant n'importe quel jour? combien de semaine y a-t-il dans 11 jours?
    Dans notre cas de départ le jour de la semaine n'est pas précisé, donc l'intervalle entre les deux sera toujours un nombre entier de semaines, on considère alors la semaine comme une unité atomique de l'année.

    Je suis d'accord sur le fait que c'est pas très précis:
    Arrétez moi si je me trompe mais
    Comme une année = 52.1et des brouettes semaines, ca devient "significativement" faux sur des intervalle de 10 ans et plus à peu près.
    A voir si çà convient pour l'application comme marge d'erreur, ou s'il faut creuser plus loin la solution.
    Qu'en pensez vous?

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    200653 c'est quoi? la 53e de 2006?
    c'est donc du WW non?
    combien y a-t-il de semaine entre dimanche 31 décembre 2006 et lundi 1er janvier 2007 ? 1? ou 0?

    tant que le problème n'est pas bien posé, il n'y a pas de "bonne" solution

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci à tous pour vos réponses. Je vais essayer de préciser ma question.
    Effectivement, je ne suis pas en format ISO car les dates que j'utilisent sont alimentées par un traitement séparé qui utilise le format YYYYWW.
    Par ailleurs, il faut savoir que l'écart ne sera jamais supérieur à 2 ans et que donc on ne se soucie pas d'un effet de multiplication de marge d'erreur avec le nombre d'années.
    En résumé, il me semble qu'en considérant que l'année compte 52 semaines, et que l'écart entre la 53è semaine de l'année N et la 1ere semaine de l'année N+1 est = à 0, on n'est pas loin de la vérité (puisque comme le dit gaboo_bl, la 53e semaine = environ 0,1 semaine).
    Le code serait alors du style :
    si annee1=annee2, écart=semaine2-semaine1
    si annee2<>annee1, écart=semaine2+(52-decode(semaine1,53,52,semaine1)

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/05/2009, 17h54
  2. soustraction entre deux dates en java
    Par zekabyle dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/04/2007, 12h12
  3. Soustraction entre deux dates
    Par Jayceblaster dans le forum Delphi
    Réponses: 8
    Dernier message: 17/02/2007, 13h10
  4. Soustraction entre deux dates
    Par franculo_caoulene dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/01/2006, 10h59
  5. [Date] Soustraction de deux dates ?
    Par nesbla dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 29/03/2004, 11h54

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