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 :

Paramètres NLS et numéro du jour de la semaine


Sujet :

SQL Oracle

  1. #1
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut Paramètres NLS et numéro du jour de la semaine
    Bonjour à tous,

    J'essaie de déterminer le lundi de la semaine en cours. Pour cela, j'utilise la formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SYSDATE - TO_CHAR(SYSDATE, 'D') + 1
    ... qui ne fonctionne qu'à condition que le lundi soit le jour numéro 1.

    Je me suis aperçu que c'était OK sur certains postes clients, mais que sur d'autres, ainsi que sur le serveur, il y avait un décalage d'une journée (donc Dimanche = 1).

    La doc SQL me dit que cela dépend du NLS_TERRITORY, ce qui me pose deux problèmes :
    • quand je teste avec apex.oracle.com, qui a un NLS_TERRITORY = America, le lundi est bien le jour 1.
    • il me semble qu'on ne peut pas préciser le NLS_TERRITORY dans le TO_CHAR, mais seulement dans un ALTER SESSION ; or, je passe par BO, ce qui m'interdit de passer un ALTER SESSION avant la requête


    Savez-vous exactement ce qui détermine la numérotation des jours de la semaine ? Y a-t-il une solution qui ne suppose pas de réglage des clients ? Sinon, ou dois-je modifier le paramétrage des clients ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Ce que tu pourrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> SELECT NEXT_DAY(SYSDATE-7,'LUNDI')  FROM DUAL;
     
    NEXT_DAY
    --------
    17/03/08
     
    SQL>
    Mais en revanche le code suivant ne fonctionnera pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> SELECT NEXT_DAY(SYSDATE-7,'MONDAY')  FROM DUAL;
    SELECT NEXT_DAY(SYSDATE-7,'MONDAY')  FROM DUAL
                              *
    ERREUR Ó la ligne 1 :
    ORA-01846: ce n'est pas un jour de semaine valide
     
     
    SQL>
    Tiré des docs d'oracle :

    The argument char must be a day of the week in the date language of your session, either the full name or the abbreviation
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    ah, je ne connaissais pas NEXT_DAY, et ça correspond bien à ce que je cherche. Néanmoins, j'ai l'impression qu'avec des clients divergents, je vais retrouver le même genre de pb, puisque certains voudront LUNDI et d'autres MONDAY... et NEXT_DAY n'a pas l'air d'accepter un paramètre NLS...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Juste une petite remarque j'ai déja utilisé le NLS avec le To_char mais pas dans le même contexte
    voila l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT to_char(sysdate,'DD Month YYYY','NLS_DATE_LANGUAGE = FRENCH') FROM dual
    Bonne journée

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    @fatati : oui, j'ai aussi fait ça, mais le NLS_DATE_LANGUAGE n'a pas l'air d'avoir la moindre influence sur le numéro du jour de la semaine, et le NLS_TERRITORY semble interdit dans le TO_CHAR...

    J'ai pu rater un truc, donc si je dis des bêtises, corrigez-moi !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Vu les contraintes que tu a il est peut être envisageable de modifier le NLS_TERITORY dans un trigger After LOGON

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Vu tes contraintes, il peut être envisageable de modifier le NLS_TERITORY dans un trigger After LOGON
    oui, comme dis-là : http://www.dbasupport.com/forums/showthread.php?t=49373

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    C'est complètement tordu mais ça m'a l'air très intéressant, je vais regarder ça. Merci !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Finalement, j'ai utilisé NEXT_DAY, avec un TO_CHAR(..., 'DAY') pour générer automatiquement le nom du jour de la semaine dans la bonne langue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NEXT_DAY(TRUNC(SYSDATE), TO_CHAR(DATE '2008-03-31', 'DAY'))
    Merci à tous !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  10. #10
    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
    Citation Envoyé par Antoun Voir le message
    J'essaie de déterminer le lundi de la semaine en cours.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select trunc(sysdate,'IW') from dual;

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    c'est vachement plus simple, et ça m'a l'air de marcher indépendamment du paramétrage NLS .

    La doc donne pour IW la définition "Same day of the week as the first day of the ISO year"... qu'est-ce que la ISO year ? si j'en crois la wikipedia, ça veut dire que ce sera toujours un lundi, mais je suis preneur de détails ou confirmation...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  12. #12
    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
    je confirme!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/01/2010, 08h51
  2. Numéro de jour de la semaine différent
    Par Superdub dans le forum SQL
    Réponses: 16
    Dernier message: 28/09/2009, 10h25
  3. Numéro de jour dans la semaine
    Par tsrsi2006 dans le forum Débuter
    Réponses: 6
    Dernier message: 13/04/2009, 14h30
  4. [Transact SQL] Numéro du jour de la semaine
    Par jowsuket dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/01/2009, 14h58
  5. Récupérer le numéro du jour dans la semaine
    Par alliance dans le forum MFC
    Réponses: 1
    Dernier message: 19/10/2007, 10h54

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