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