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

Administration Oracle Discussion :

[9i] Nls_date_format = dd/mm/rr


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut [9i] Nls_date_format = dd/mm/rr
    Bonjour à tous,

    Suite de la discussion Que siginfie "RR" dans NLS_DATE_FORMAT=DD/MM/RR

    En réponse à Magnus, je crois que vous vous avancez un peu, voici ce qui est fait :

    Insertion de la date dans la bd :
    birth_date = to_date(to_char(birthDate), 'YYYYMMDD')
    avec birthDate (number(8) = 19490509).



    Après insertion des données, la requête :

    select to_char(birth_date, 'DD/MM/YYYY') from table1 where cle like '%1011219171';

    donne :

    09/05/2049

    Etrange non ?


    Voili, voila !

  2. #2
    Membre éclairé Avatar de olivanto
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2005
    Messages
    513
    Détails du profil
    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2005
    Messages : 513
    Par défaut
    rien compris, même si tu as peut être raison !

    Tel que je vois la chose :

    select to_date('220773','ddmmRR') from dual ramène 22/07/1973 (correct)

    select to_date('220773','ddmmyy') from dual ramène 22/07/2073 (incorrect)

    En gros, utilisable par les furieux qui ont des digits "années" sur 2 chiffres. (au fou !! )

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut
    ben c'est simple on a le format date sous oracle :

    NLS_DATE_FORMAT=DD/MM/RR


    on insère une date par :
    insert into toto (birth_date) values (to_date(to_char(birthDate), 'YYYYMMDD'))

    avec birthDate (number(8) = 19490509)


    Après insertion des données, le select

    select to_char(birth_date, 'DD/MM/YYYY') from toto where cle like '%toto';

    sur les données insérées donne :

    09/05/2049


    voili, voila !

    Ce qui me gène dans ton raisonnement et dans celui de Magnus, c'est que vous faites un select from dual, avec une table auriez-vous le même résultat ?

    Merci de votre aide.

    Cordialement.

  4. #4
    Membre éclairé Avatar de olivanto
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2005
    Messages
    513
    Détails du profil
    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2005
    Messages : 513
    Par défaut
    je ne comprend rien (c'est une habitude, faut pas s'inquiéter ...)

    Si tu as NLS_DATE_FORMAT=DD/MM/RR, tes INSERT devraient se faire sur deux digits pour l'année, pas 4 ?!

    Sinon, quel intérêt d'un format aussi pénible ?

    Je vias essayer ton hsitoire sur une de mes base de tests, pour voir.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    J'ai quelques remarques bien que je n'arrive pas à reproduire sur 10gR1 le comportement que vous décrivez :
    - quand vous utilisez TO_CHAR, TO_DATE et TO_NUMBER, spécifiez systématiquement un masque de format après le 1er argument
    - évitez de donner le même nom à une variable locale (ou globale dans forms par exemple) et à une colonne d'une table que vous manipulez dans la même procédure / fonction / bloc anonyme (ex : birth_date)
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    10g SOC5> create table dvp(
      2    birth_date date);
     
    Table créée.
     
    10g SOC5>   
    10g SOC5> declare
      2    birth_date  number(8) := 19490509;
      3  begin
      4    insert into dvp (birth_date) values (to_date( to_char(birth_date, '99
      5                                                  'YYYYMMDD') );
      6    commit;
      7  end;
      8  /
     
    Procédure PL/SQL terminée avec succès.
     
    10g SOC5> 
    10g SOC5> alter session set nls_date_format = 'DD/MM/RR';
     
    Session modifiée.
     
    10g SOC5> select *
      2  from dvp;
     
    BIRTH_DA
    --------
    09/05/49
     
    1 ligne sélectionnée.
     
    10g SOC5> 
    10g SOC5> alter session set nls_date_format = 'DD/MM/YY';
     
    Session modifiée.
     
    10g SOC5> select *
      2  from dvp;
     
    BIRTH_DA
    --------
    09/05/49
     
    1 ligne sélectionnée.
     
    10g SOC5> 
    10g SOC5> alter session set nls_date_format = 'DD/MM/RRRR';
     
    Session modifiée.
     
    10g SOC5> select *
      2  from dvp;
     
    BIRTH_DATE
    ----------
    09/05/1949
     
    1 ligne sélectionnée.
     
    10g SOC5> 
    10g SOC5> alter session set nls_date_format = 'DD/MM/YYYY';
     
    Session modifiée.
     
    10g SOC5> select *
      2  from dvp;
     
    BIRTH_DATE
    ----------
    09/05/1949
     
    1 ligne sélectionnée.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 53
    Par défaut
    Avec le format RR oracle interpète les dates avec l'année sur 2 positions ( ) comme étant du 20eme siécle si les 2 chiffres vont de 50 à 99 et du 21eme siècle pour les chiffre allant de 00 à 49.

Discussions similaires

  1. [1.x] 'SESSION SET NLS_DATE_FORMAT
    Par benakacha dans le forum Symfony
    Réponses: 1
    Dernier message: 21/01/2010, 20h09
  2. paramètre nls_date_format à modifier pour la DB
    Par titi04 dans le forum Administration
    Réponses: 1
    Dernier message: 08/01/2009, 18h02
  3. probleme nls_date_format sous 10g express edition
    Par narkotik dans le forum SQL
    Réponses: 7
    Dernier message: 05/03/2008, 16h21
  4. Réponses: 15
    Dernier message: 22/02/2008, 14h50
  5. Que siginfie "RR" dans NLS_DATE_FORMAT=DD/MM/RR
    Par farenheiit dans le forum Administration
    Réponses: 4
    Dernier message: 06/07/2007, 09h50

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