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 :

Récupérer le numéro de la semaine sur une date


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Récupérer le numéro de la semaine sur une date
    Bonjour,

    je pense que cette question est un grand classique mais je ne parviens pas à obtenir le bon numéro de semaine :
    j'utilise :
    to_char( to_date(madate,'DD:MM:YYYY HH24:MI:SS'), 'IW')
    ou
    to_char( to_date(madate,'DD:MM:YYYY HH24:MI:SS'), 'WW')

    et cela me renvoit :
    samedi 26/07 -> sem 30
    lundi 28/07 -> sem 30 (également)

    je crois savoir que sous Oracle la semaine ne commence pas un lundi, je suppose que le probléme vient de là, mais j'ai beau parcourir des tas de forums, je ne parviens vraiment pas à trouver de solution .

    pourriez-vous m'orienter s'il vous plaît ?

    un grand merci,

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select  to_char( to_date('26/07/2008','DD/MM/YYYY'), 'IW'),
               to_char( to_date('28/07/2008','DD/MM/YYYY'), 'IW')
    from dual
    me retourne bien 30 et 31

    quel est le contenu de nls_session_parameters ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    Le lundi est le premier jour de la semaine en france, mais c'est le dimanche au USA.(je ne sais plus quel parametre nls joue)
    Par contre de base mieux vaut utiliser IW/IYYY pour avoir le numeros de semain ISO a cause des semaines 53 de fin d'année et par conséquent pour recupérer les semaines 01 correctes.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par c.langlet Voir le message
    Le lundi est le premier jour de la semaine en France, mais c'est le dimanche au USA.(je ne sais plus quel parametre nls joue)
    Il me semble que c'est le paramètre NLS_TERRITORY qui est en cause ( http://www.dbasupport.com/forums/showthread.php?t=49373 )
    Le dimanche est le premier jour de la semaine pour l'Amérique, et sûrement ailleurs aussi.

  5. #5
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    le test se fait sur un samedi et un lundi. donc quelle que soit le territory, on est bien sur deux semaines différentes, il n'y a aucun doute (à ma connaissance aucune semaine ne commence un autre jour que dimanche ou lundi)

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    aprés quelque recherche j'obtiens ceci :


    SQL> select * from NLS_DATABASE_PARAMETERS ;

    PARAMETER VALUE
    ------------------------------ ---------------------------------------
    NLS_LANGUAGE AMERICAN
    NLS_TERRITORY AMERICA
    NLS_CURRENCY $
    NLS_ISO_CURRENCY AMERICA
    NLS_NUMERIC_CHARACTERS .,
    NLS_CHARACTERSET WE8ISO8859P1
    NLS_CALENDAR GREGORIAN
    NLS_DATE_FORMAT DD/MM/RR
    NLS_DATE_LANGUAGE AMERICAN
    NLS_SORT BINARY
    NLS_TIME_FORMAT HH.MI.SSXFF AM

    PARAMETER VALUE
    ------------------------------ ---------------------------------------
    NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM
    NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZM
    NLS_DUAL_CURRENCY $
    NLS_COMP BINARY
    NLS_NCHAR_CHARACTERSET UTF8
    NLS_RDBMS_VERSION 8.1.7.4.0

    18 ligne(s) sélectionnée(s).

    ALTER SESSION SET NLS_CALENDAR = 'Gregorian'
    ALTER SESSION SET NLS_DATE_LANGUAGE= 'FRENCH' ;
    ALTER SESSION SET NLS_TERRITORY= 'FRANCE'


    SQL> SELECT * FROM nls_session_parameters ;

    PARAMETER VALUE
    ------------------------------ ----------------------------------------
    NLS_LANGUAGE FRENCH
    NLS_TERRITORY FRANCE
    NLS_CURRENCY F
    NLS_ISO_CURRENCY FRANCE
    NLS_NUMERIC_CHARACTERS ,.
    NLS_CALENDAR GREGORIAN
    NLS_DATE_FORMAT DD/MM/YY
    NLS_DATE_LANGUAGE FRENCH
    NLS_SORT FRENCH
    NLS_TIME_FORMAT HH24:MI:SSXFF
    NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF

    PARAMETER VALUE
    ------------------------------ ----------------------------------------
    NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZH:TZM
    NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZH:TZM
    NLS_DUAL_CURRENCY ¿
    NLS_COMP BINARY

    15 ligne(s) sélectionnée(s).

    SQL> select to_char(to_date(madate,'DD:MM:YYYY HH24:MI:SS'), 'IW')
    from matable


    UPDATE_T Se
    -------- --
    26/07/08 30
    26/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    28/07/08 30


    je n'ai toujours pas les bons numéro de semaine....

  7. #7
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    merci de jouer le même scénario de test que celui proposé et qui peut être joué par tout le monde !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  to_char( to_date('26/07/2008','DD/MM/YYYY'), 'IW'),
               to_char( to_date('28/07/2008','DD/MM/YYYY'), 'IW')
    FROM dual

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    merci de votre réponse et désolé, je suis un débutant :

    SQL> select madate,to_char(to_date(madate,'DD:MM:YYYY'),'IW')
    2 from matable


    UPDATE_T TO
    -------- --
    26/07/08 30
    26/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    28/07/08 30

    8 ligne(s) sélectionnée(s).

    SQL> SELECT to_char( to_date('26/07/2008','DD/MM/YYYY'), 'IW'),
    2 to_char( to_date('28/07/2008','DD/MM/YYYY'), 'IW')
    3 FROM dual
    4 ;

    TO TO
    -- --
    30 31

    ???
    je ne comprend plus rien ....

  9. #9
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    merci d'utiliser les balises !

    donc le problème ne vient pas de la conversion mais de vos données.

    donnez-nous le desc de la table, on verra pourquoi vous faites un to_char(to_date

    Donnez nous le résultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select dump(ma-colonne-date), ma-colonne-date from matable;

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    oups, désolé pour les balises

    voici le résultat du dump

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT dump(ma-colonne-date), ma-colonne-date FROM matable;
     
    1	Typ=12 Len=7: 120,106,1,5,15,58,44	05/01/2006 14:57:43
    2	Typ=12 Len=7: 120,106,1,5,15,59,47	05/01/2006 14:58:46
    3	Typ=12 Len=7: 120,106,1,5,15,59,56	05/01/2006 14:58:55
    4	Typ=12 Len=7: 120,106,1,5,15,60,58	05/01/2006 14:59:57
    5	Typ=12 Len=7: 120,106,1,5,15,56,36	05/01/2006 14:55:35
    6	Typ=12 Len=7: 120,106,1,5,16,2,34	05/01/2006 15:01:33
    7	Typ=12 Len=7: 120,106,1,5,16,4,8	05/01/2006 15:03:07
    8	Typ=12 Len=7: 120,104,11,17,14,5,46	17/11/2004 13:04:45
    9	Typ=12 Len=7: 120,104,11,17,14,16,49	17/11/2004 13:15:48
    10	Typ=12 Len=7: 120,104,11,17,11,24,58	17/11/2004 10:23:57

  11. #11
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    ça aiderait d'avoir un lot cohérent dump-date-semaine permettant de voir le problème...

  12. #12
    Candidat au Club
    Inscrit en
    Décembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bagbones Voir le message
    merci de votre réponse et désolé, je suis un débutant :

    SQL> select madate,to_char(to_date(madate,'DD:MM:YYYY'),'IW')
    2 from matable


    UPDATE_T TO
    -------- --
    26/07/08 30
    26/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    29/07/08 30
    28/07/08 30

    8 ligne(s) sélectionnée(s).
    ...
    Quel est le type du champ madate?
    Si c'est un champ date ou timestamp, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select madate,to_char(madate,'IW') from matable;

Discussions similaires

  1. [C#] Comment récupérer le numéro de semaine d'une date ?
    Par farfadet dans le forum Windows Forms
    Réponses: 9
    Dernier message: 17/07/2013, 16h33
  2. [XL-2003] Récupérer le numéro de semaine d'une date
    Par tools dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/04/2011, 21h28
  3. [AC-2003] Récupérer le numéro de semaine sur une date
    Par Snow06 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/09/2010, 16h18
  4. [VB.NET] Obtenir le numéro de la semaine d'une date
    Par alain&&thomas dans le forum Windows Forms
    Réponses: 9
    Dernier message: 07/09/2009, 17h54
  5. Comment récupérer la liste des logiciels installés sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 19/09/2003, 17h41

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