Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment changer le format de date dans votre session Oracle

Lorsque vous travaillez avec des fonctions qui renvoient des dates, Oracle Database renvoie ces dates en fonction de la valeur de NLS_DATE_FORMAT paramètre.

Il existe également un NLS_TIMESTAMP_FORMAT paramètre et un NLS_TIMESTAMP_TZ_FORMAT paramètre, qui ont tous deux un masque de format datetime qui peut être spécifié séparément.

Tous ces paramètres ont leurs valeurs par défaut dérivées du NLS_TERRITORY paramètre (qui, par défaut, dépend du système d'exploitation).

Ainsi, pour modifier le format de date de votre session, vous pouvez soit mettre à jour le NLS_TERRITORY paramètre, ou mettre à jour explicitement chaque paramètre individuellement.

Cet article fournit des exemples de vérification et de modification de ces valeurs, ainsi que d'affichage des résultats.

Vérifier le réglage initial

Tout d'abord, vérifions mon paramètre actuel pour le NLS_DATE_FORMAT paramètre :

SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Résultat :

                 PARAMETER                             VALUE 
__________________________ _________________________________ 
NLS_TERRITORY              AUSTRALIA                         
NLS_DATE_FORMAT            DD/MON/RR                         
NLS_TIMESTAMP_FORMAT       DD/MON/RR HH12:MI:SSXFF AM        
NLS_TIMESTAMP_TZ_FORMAT    DD/MON/RR HH12:MI:SSXFF AM TZR    

La valeur de mon NLS_TERRITORY le paramètre est AUSTRALIA , et donc les différents paramètres datetime utilisent le modèle de format par défaut pour l'Australie.

Cette valeur affecte la façon dont la date est formatée lorsque nous utilisons certaines fonctions. Par exemple, voici un exemple d'utilisation de SYSDATE pour retourner la date actuelle :

SELECT SYSDATE
FROM DUAL;

Résultat :

04/AUG/21

Modifier le paramètre

Nous pouvons utiliser la ALTER SESSION pour modifier le réglage de ces paramètres.

Nous avons la possibilité de modifier chacun de ces paramètres individuellement, ou de modifier le NLS_TERRITORY paramètre, qui met automatiquement à jour implicitement chacun de ces paramètres.

Modifier le NLS_TERRITORY Paramètre

Voici un exemple de modification du NLS_TERRITORY paramètre :

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';

Résultat :

Session altered.

Vérifions les nouvelles valeurs :

SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Résultat :

                 PARAMETER                           VALUE 
__________________________ _______________________________ 
NLS_TERRITORY              AMERICA                         
NLS_DATE_FORMAT            DD-MON-RR                       
NLS_TIMESTAMP_FORMAT       DD-MON-RR HH.MI.SSXFF AM        
NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZR    

Nous pouvons donc voir que non seulement le territoire a été mis à jour, mais que les différents paramètres datetime ont également été mis à jour.

Modifier uniquement le NLS_DATE_FORMAT Paramètre

Voici un exemple de mise à jour du NLS_DATE_FORMAT paramètre :

ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';

Résultat :

Session altered.

Vérifions la nouvelle valeur :

SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Résultat :

                 PARAMETER                           VALUE 
__________________________ _______________________________ 
NLS_TERRITORY              AMERICA                         
NLS_DATE_FORMAT            rr-mm-dd                        
NLS_TIMESTAMP_FORMAT       DD-MON-RR HH.MI.SSXFF AM        
NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZR    

Comme prévu, seul le NLS_DATE_FORMAT paramètre a été changé au nouveau format. Les autres restent inchangés.

Maintenant, lorsque nous exécutons SYSDATE , la date est renvoyée dans notre nouveau format, mais SYSTIMESTAMP le renvoie en utilisant le NLS_TIMESTAMP_TZ_FORMAT format, qui est inchangé :

SELECT 
    SYSDATE,
    SYSTIMESTAMP
FROM DUAL;

Résultat :

    SYSDATE                              SYSTIMESTAMP 
___________ _________________________________________ 
21-08-09    09-AUG-21 07.22.35.402453000 PM -04:00