Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Invité de passage
    Inscrit en
    novembre 2012
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : novembre 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut Format Date Abrégé

    Bonjour,

    Je souhaite récupérer la valeur du jour au format abrégé Oracle mais j'obtiens des valeurs différentes en fonction de la base sur laquelle je travaille. J'utilise la fonction suivante :

    Code :
    SELECT to_char(sysdate,'DY','NLS_DATE_LANGUAGE=''FRENCH''') INTO myday FROM dual;
    Cette requête retourne la valeur "SA" sur une base 9i mais elle retourne "SAM." sur une base 11g.
    Je ne comprends pas d'où peut provenir cette différence de résultat.

    Lorsque j'utilise un autre langage que le français, je n'ai aucune différence de résultat entre les deux versions.

    Avez-vous une piste, une idée ?

    Merci

  2. #2
    Membre habitué
    Inscrit en
    septembre 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 74
    Points : 115
    Points
    115

    Par défaut

    Salut brlagl,

    Je n'ai pas d'Oracle 9i pour tester ta requête. Mais, si tu as effectivement la même requête renvoyant deux résultat différents sous deux versions différentes alors je te conseillerai d'appeler le support Oracle.

    Quoiqu'il en soit, je vois que tu retourne ce jour dans une variable. Personnellement, je pense que tu devrais utiliser le numéro du jour. Ainsi, tu restes indépendant de la langue. Quelque chose comme:
    Code :
    SELECT 1 + FLOOR (SYSDATE - TRUNC (SYSDATE, 'IW')) FROM dual;
    .

    Te renverra toujours 1 si le jour est lundi et 7 si c'est dimanche. Peu importe les paramètres de la session ou de la base de données. Mieux vaut toujours préférer une solution indépendante de tout paramètres NLS_. Tu peux jamais être certain que ceux-ci ne changeront pas au niveau des sessions ou de ta base.


    A+

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    décembre 2002
    Messages
    2 811
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : décembre 2002
    Messages : 2 811
    Points : 4 530
    Points
    4 530

    Par défaut

    Citation Envoyé par brlagl Voir le message
    Bonjour,

    Je souhaite récupérer la valeur du jour au format abrégé Oracle mais j'obtiens des valeurs différentes en fonction de la base sur laquelle je travaille. J'utilise la fonction suivante :

    select to_char(sysdate,'DY','NLS_DATE_LANGUAGE=''FRENCH''') into myday from dual;

    Cette requête retourne la valeur "SA" sur une base 9i mais elle retourne "SAM." sur une base 11g.
    Je ne comprends pas d'où peut provenir cette différence de résultat.

    Lorsque j'utilise un autre langage que le français, je n'ai aucune différence de résultat entre les deux versions.

    Avez-vous une piste, une idée ?

    Merci
    Effectivement, il y a eu un changement dans l'abréviation des jours de semaine et des noms de mois en français (et peut-être d'autres langues), qui est intervenue sous Oracle 10g, me semble-t-il, et pour une raison que j'ignore.

    Donc il faut adopter les nouveaux formats.
    Consultant / formateur Oracle indépendant
    Certifié OCP 10g et 11g, sécurité 11g

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    décembre 2002
    Messages
    2 811
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : décembre 2002
    Messages : 2 811
    Points : 4 530
    Points
    4 530

    Par défaut

    Citation Envoyé par amir. Voir le message
    Te renverra toujours 1 si le jour est lundi et 7 si c'est dimanche. Peu importe les paramètres de la session ou de la base de données. Mieux vaut toujours préférer une solution indépendante de tout paramètres NLS_.
    C'est malheureusement complètement faux, comme j'avais eu l'occasion de le montrer ici : http://www.developpez.net/forums/d87...e/#post4988269
    Consultant / formateur Oracle indépendant
    Certifié OCP 10g et 11g, sécurité 11g

  5. #5
    Membre habitué
    Inscrit en
    septembre 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 74
    Points : 115
    Points
    115

    Par défaut

    Citation Envoyé par Pomalaix Voir le message
    C'est malheureusement complètement faux, comme j'avais eu l'occasion de le montrer ici : http://www.developpez.net/forums/d87...e/#post4988269

    Alors si je peux me permettre... Une année ISO commence toujours un lundi et termine toujours un dimanche. Peu importe le pays, la langue ou la configuration de l'utilisateur. Est-ce que vous avez un exemple qui en jouant sur les paramètres NLS (comme dans votre exemple listé) me reverrait un chiffre différent de 1 à 7 (1=lundi et 7=Dimanche) pour la requête suivante??

    Code :
    1
    2
    3
    4
     
    -- ALTER SESSION SET nls_territory = ALGERIA; AMERICA... 
    SELECT 1 + FLOOR (SYSDATE - TRUNC (SYSDATE, 'IW')) 
      FROM dual;
    Merci

  6. #6
    Invité de passage
    Inscrit en
    novembre 2012
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : novembre 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Merci pour vos réponses, je vois que je n'ai apparemment pas d'autre choix que de m'adapter à ce nouveau format de date abrégé...

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    décembre 2002
    Messages
    2 811
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : décembre 2002
    Messages : 2 811
    Points : 4 530
    Points
    4 530

    Par défaut

    Citation Envoyé par amir. Voir le message
    Code :
    1
    2
    3
    -- ALTER SESSION SET nls_territory = ALGERIA; AMERICA... 
    SELECT 1 + FLOOR (SYSDATE - TRUNC (SYSDATE, 'IW')) 
      FROM dual;
    J'ai eu le grand tort de répondre trop vite après une lecture en diagonale, sans m'arrêter sur votre formule, et en fonçant sur la phrase finale.

    Et effectivement, je n'ai pas d'exemple à vous proposer qui la prenne en défaut !

    Mes excuses donc, et coup de chapeau pour cette formule indépendante du paramétrage NLS.
    Consultant / formateur Oracle indépendant
    Certifié OCP 10g et 11g, sécurité 11g

  8. #8
    Invité de passage
    Inscrit en
    novembre 2012
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : novembre 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par Pomalaix Voir le message
    Effectivement, il y a eu un changement dans l'abréviation des jours de semaine et des noms de mois en français (et peut-être d'autres langues), qui est intervenue sous Oracle 10g, me semble-t-il, et pour une raison que j'ignore.

    Donc il faut adopter les nouveaux formats.
    As-tu une documentation sur ce sujet stp ? J'ai beau chercher sur le support d'Oracle, je n'ai encore rien trouvé qui mentionne ce changement.

  9. #9
    Expert Confirmé Sénior Avatar de mnitu
    Homme Profil pro Marius Nitu
    Ingénieur développement logiciels
    Inscrit en
    octobre 2007
    Messages
    4 479
    Détails du profil
    Informations personnelles :
    Nom : Homme Marius Nitu
    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 : 4 479
    Points : 8 909
    Points
    8 909

  10. #10
    Invité de passage
    Inscrit en
    novembre 2012
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : novembre 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Merci à vous pour ces informations.
    Je vais donc changer le code de l'application.

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    décembre 2002
    Messages
    2 811
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : décembre 2002
    Messages : 2 811
    Points : 4 530
    Points
    4 530

    Par défaut

    Pour ceux qui voudraient creuser le sujet, il y a une note Metalink dédiée aux changements NLS intervenus en 10g : 292942.1.

    On y apprend par exemple que la liste des modifications figure dans ORACLE_HOME/nls/data/old/data_changes.htm
    Consultant / formateur Oracle indépendant
    Certifié OCP 10g et 11g, sécurité 11g

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •