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 deDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
tipo de datosinterval
puede ser un valor deINTERVAL
DAY
TO
SECOND
oINTERVAL
YEAR
TO
MONTH
tipo de datosfmt
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
yTIMESTAMP
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: