sql >> Base de Datos >  >> RDS >> Oracle

Cómo cambiar el formato de fecha en su sesión de Oracle

Cuando se trabaja con funciones que devuelven fechas, Oracle Database devuelve estas fechas en función del valor de NLS_DATE_FORMAT parámetro.

También hay un NLS_TIMESTAMP_FORMAT parámetro y un NLS_TIMESTAMP_TZ_FORMAT parámetro, los cuales tienen una máscara de formato de fecha y hora que se puede especificar por separado.

Todos estos parámetros tienen sus valores predeterminados derivados del NLS_TERRITORY parámetro (que por defecto depende del sistema operativo).

Entonces, para cambiar el formato de fecha de su sesión, puede actualizar el NLS_TERRITORY parámetro, o actualizar explícitamente cada parámetro individualmente.

Este artículo proporciona ejemplos de cómo verificar y cambiar estos valores y ver los resultados.

Compruebe la configuración inicial

Primero, verifiquemos mi configuración actual para el NLS_DATE_FORMAT parámetro:

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

Resultado:

                 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    

El valor de mi NLS_TERRITORY el parámetro es AUSTRALIA , por lo que los diversos parámetros de fecha y hora usan el modelo de formato predeterminado para Australia.

Este valor afecta cómo se formatea la fecha cuando usamos ciertas funciones. Por ejemplo, aquí hay un ejemplo del uso de SYSDATE para devolver la fecha actual:

SELECT SYSDATE
FROM DUAL;

Resultado:

04/AUG/21

Cambiar la configuración

Podemos usar el ALTER SESSION para cambiar la configuración de estos parámetros.

Tenemos la opción de cambiar cada uno de estos parámetros individualmente, o cambiar el NLS_TERRITORY parámetro, que actualiza automáticamente cada uno de esos parámetros implícitamente.

Cambiar el NLS_TERRITORY Parámetro

Aquí hay un ejemplo de cómo cambiar el NLS_TERRITORY parámetro:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';

Resultado:

Session altered.

Comprobemos los nuevos valores:

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

Resultado:

                 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    

Entonces podemos ver que, no solo se ha actualizado el territorio, sino que también se han actualizado los diversos parámetros de fecha y hora.

Cambie solo el NLS_DATE_FORMAT Parámetro

Este es un ejemplo de cómo actualizar el NLS_DATE_FORMAT parámetro:

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

Resultado:

Session altered.

Comprobemos el nuevo valor:

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

Resultado:

                 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    

Como era de esperar, solo el NLS_DATE_FORMAT El parámetro se ha cambiado al nuevo formato. Los demás permanecen sin cambios.

Ahora cuando ejecutamos SYSDATE , la fecha se devuelve en nuestro nuevo formato, pero SYSTIMESTAMP lo devuelve usando el NLS_TIMESTAMP_TZ_FORMAT formato, que no ha cambiado:

SELECT 
    SYSDATE,
    SYSTIMESTAMP
FROM DUAL;

Resultado:

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