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

Función TO_CHAR (fecha y hora) en Oracle

En Oracle Database, el TO_CHAR(datetime) La función convierte un valor de intervalo o fecha y hora en un VARCHAR2 valor en el formato especificado por el formato de fecha.

Sintaxis

La sintaxis es así:

TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])

donde:

  • datetime puede ser un valor de DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE tipo de datos
  • interval puede ser un valor de INTERVAL DAY TO SECOND o INTERVAL YEAR TO MONTH tipo de datos
  • fmt es un modelo de formato opcional que especifica cómo debe formatearse el resultado
  • 'nlsparam' es un argumento opcional que especifica el idioma en el que se devuelven los nombres de mes y día y las abreviaturas.

Ejemplo

Aquí hay un ejemplo para demostrarlo:

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

Resultado:

WED, 26 SEPTEMBER 2035

Entonces, devolvió la fecha que se proporcionó 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.

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.

Formato predeterminado

Si omite el fmt argumento, el resultado se convertirá de la siguiente manera:

  • DATE los valores se convierten en valores en el formato de fecha predeterminado.
  • TIMESTAMP y TIMESTAMP WITH LOCAL TIME ZONE los valores se convierten en valores en el formato de marca de tiempo predeterminado.
  • TIMESTAMP WITH TIME ZONE los valores se convierten en valores en la marca de tiempo predeterminada con formato de zona horaria.
  • Los valores de intervalo se convierten a la representación numérica del literal de intervalo.

Aquí hay un ejemplo de cómo convertir un DATE valor sin especificar el formato:

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

Resultado:

26/SEP/35

En este caso, el formato de fecha predeterminado de mi sesión es DD/MON/RR , por lo que el resultado refleja eso. Sé que este es el formato de fecha predeterminado de mi sesión porque consulté el V$NLS_PARAMETERS view, que me muestra el valor actual de los parámetros NLS.

Consulte Cómo verificar los valores de los parámetros NLS si necesita verificarlos.

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.

Intervalo

Aquí hay un ejemplo que genera un valor de intervalo en el formato predeterminado:

SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;

Resultado:

+25-02

El 'nlsparam' Argumento

El 'nlsparam' El argumento especifica el idioma en el que se devuelven los nombres y las abreviaturas de los meses y los días. Este argumento puede tener la siguiente forma:

'NLS_DATE_LANGUAGE = language'

Ejemplo:

SELECT 
    TO_CHAR(
        DATE '2035-09-26', 
        'DY, DD MONTH YYYY',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

Resultado:

MIÉ, 26 SEPTIEMBRE 2035

Argumentos nulos

Pasando null da como resultado null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Resultado:

null

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Argumento faltante

Llamar a la función sin pasar ningún argumento da como resultado un error:

SELECT TO_CHAR()
FROM DUAL;

Resultado:

Error starting at line : 1 in command -
SELECT TO_CHAR()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Pasar demasiados argumentos también genera un error:

SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;

Resultado:

Error starting at line : 1 in command -
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL
Error at Command Line : 1 Column : 72
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action: