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

Cómo formatear fechas en Oracle

Este artículo contiene ejemplos comunes de formato de fechas en Oracle Database.

El formato de fecha predeterminado para su sesión está determinado por varios parámetros de inicialización de NLS (aquí se explica cómo verificarlos). Puede aprovechar estos parámetros para generar un formato compatible con la configuración regional.

También puede usar funciones como TO_CHAR(number) para convertir fechas en una cadena y formatearlas exactamente como quieras sobre la marcha.

Formato de fecha predeterminado

Cuando devuelve una fecha en Oracle, de forma predeterminada, se devuelve en el formato de fecha predeterminado para la sesión actual.

Ejemplo:

SELECT DATE '2030-12-10' FROM DUAL;

Resultado:

10/DEC/30

En este caso, el formato de fecha predeterminado de mi sesión es DD/MON/RR , por lo que el resultado refleja eso.

Puede cambiar el formato cambiando el NLS_TERRITORY (que cambia implícitamente otros parámetros, como los parámetros de fecha y hora), o cambiar el NLS_DATE_FORMAT parámetro directamente.

Esto es lo que sucede cuando cambio el NLS_TERRITORY parámetro a un territorio diferente:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT DATE '2030-12-10' FROM DUAL;

Resultado:

10.12.30

El formato de fecha predeterminado se ha actualizado para reflejar el formato de esa configuración regional.

También hay otros parámetros NLS de fecha y hora, como NLS_TIME_FORMAT , NLS_TIME_TZ_FORMAT , NLS_TIMESTAMP_FORMAT y NLS_TIMESTAMP_TZ_FORMAT que debe tener en cuenta al cambiar los formatos de fecha y hora.

Consulte también Cómo cambiar el formato de fecha de su sesión si desea cambiar el formato de fecha y hora predeterminado para su sesión actual.

El TO_CHAR() Función

Tél TO_CHAR(datetime) La función acepta un valor de fecha y hora y devuelve una cadena con el formato que usted especifique.

He aquí un ejemplo rápido:

SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;

Resultado:

Wed, 26 September 2035

Aquí, la función devolvió la fecha proporcionada en el primer argumento, en el formato especificado por el segundo argumento.

El segundo argumento proporciona el modelo de formato. El modelo de formato puede constar de uno o más elementos de formato. Por ejemplo, Dy es un elemento de formato, al igual que DD , Month , etc

Si no especifica un formato, se devuelve utilizando el formato predeterminado para la sesión.

Consulte esta Lista completa de elementos de formato de fecha y hora en Oracle para obtener una lista de elementos de formato que se pueden usar para formatear valores de fecha y hora con esta función.

A continuación se muestran ejemplos más específicos.

Devolver el nombre del día

Puede devolver partes de fechas individuales si es necesario. Por ejemplo, puede devolver solo el nombre del día, solo el nombre del mes, etc. Todo lo que necesita hacer es usar el elemento de formato aplicable como el único elemento de formato en su modelo de formato.

Aquí hay un ejemplo de devolver el nombre del día:

SELECT TO_CHAR(DATE '2035-09-26', 'Day')
FROM DUAL;

Resultado:

Wednesday

En este caso devolví el nombre completo del día.

Podemos usar Dy como en el ejemplo anterior para devolver el nombre corto del día:

SELECT TO_CHAR(DATE '2035-09-26', 'Dy')
FROM DUAL;

Resultado:

Wednesday

Devolver el nombre del mes

Aquí hay un ejemplo de devolver el nombre del mes:

SELECT TO_CHAR(DATE '2035-09-26', 'Month')
FROM DUAL;

Resultado:

September

Y el nombre corto del mes:

SELECT TO_CHAR(DATE '2035-09-26', 'Mon')
FROM DUAL;

Resultado:

September

Sensibilidad de mayúsculas y minúsculas

En los ejemplos anteriores, escribimos en mayúscula la primera letra de los nombres de día y mes.

Alternativamente, podemos usar todas las mayúsculas para devolver los nombres del día y el mes en mayúsculas, y todas las minúsculas para devolverlos en minúsculas.

SELECT 
    TO_CHAR(DATE '2035-09-26', 'DY, Dy, dy')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'DAY, Day, day')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'MON, Mon, mon')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'MONTH, Month, month')
FROM DUAL;

Resultado:

WED, Wed, wed                           
WEDNESDAY, Wednesday, wednesday         
SEP, Sep, sep                           
SEPTEMBER, September, september         

Idioma

El NLS_DATE_LANGUAGE El parámetro se utiliza para determinar el idioma de las partes de la fecha que se deletrean (como los nombres de los días y los nombres de los meses). El valor predeterminado de este parámetro se deriva del NLS_LANGUAGE parámetro.

Este es un ejemplo de cómo actualizar el NLS_DATE_LANGUAGE parámetro, luego devolviendo una fecha formateada que incluye el nombre del día y el nombre del mes:

ALTER SESSION SET NLS_DATE_LANGUAGE = 'Spanish';
SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;

Resultado:

Mié, 26 Septiembre 2035

El idioma también se puede especificar explícitamente desde el TO_CHAR() función en sí. Hacer esto le permite anular temporalmente la configuración de idioma predeterminada para la sesión actual, sin afectar esa configuración.

Ejemplo:

ALTER SESSION SET NLS_DATE_LANGUAGE = 'English';
SELECT TO_CHAR(
    DATE '2035-09-26', 
    'Dy, DD Month YYYY',
    'NLS_DATE_LANGUAGE = Spanish'
    )
FROM DUAL;

Resultado:

Mié, 26 Septiembre 2035

En este ejemplo, configuré mi sesión actual para usar inglés, luego ejecuté una consulta para generar una fecha usando español.

Como se mencionó anteriormente, la salida de la fecha en español no afectó la configuración en inglés. Para demostrar esto, ejecuté la siguiente consulta inmediatamente después de esa (sin cambiar el NLS_DATE_LANGUAGE parámetro).

SELECT TO_CHAR(
    DATE '2035-09-26', 
    'Dy, DD Month YYYY'
    )
FROM DUAL;

Resultado:

Wed, 26 September 2035

Como era de esperar, el resultado está en inglés, que es el idioma predeterminado para la sesión actual.