Uno de los errores más comunes al trabajar con fechas en Oracle es tratarlas como si fueran simples cadenas de texto. `TO_DATE` sirve para convertir una cadena en un valor de tipo fecha indicando el formato en el que viene escrita.
La idea es sencilla: si recibimos una fecha como texto, Oracle necesita saber qué parte es el día, qué parte es el mes y qué parte es el año.
## Sintaxis
TO_DATE(cadena, formato)
También puede indicarse el idioma usado para nombres de meses o días:
TO_DATE(cadena, formato, 'NLS_DATE_LANGUAGE = idioma')
## Ejemplos básicos
Convertir una fecha escrita como año, mes y día:
SELECT TO_DATE('2026-07-05', 'YYYY-MM-DD') AS fecha
FROM dual;
Convertir una fecha escrita en formato habitual día/mes/año:
SELECT TO_DATE('05/07/2026', 'DD/MM/YYYY') AS fecha
FROM dual;
Convertir una fecha con hora y minuto:
SELECT TO_DATE('05-07-2026 14:30', 'DD-MM-YYYY HH24:MI') AS fecha
FROM dual;
## Meses escritos con letras
Si la cadena contiene el mes en texto, conviene indicar el idioma para evitar errores según la configuración de la sesión:
SELECT TO_DATE( '05-JUL-2026', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = American' ) AS fecha FROM dual;
## Diferencia entre `YY` y `RR`
En fechas antiguas o datos heredados puede aparecer el año con dos dígitos. En esos casos, `RR` ayuda a interpretar el siglo de forma compatible con datos antiguos:
SELECT TO_DATE('05-JUL-26', 'DD-MON-RR', 'NLS_DATE_LANGUAGE = American') AS fecha
FROM dual;
Para datos nuevos, siempre que sea posible, es mejor guardar o recibir el año con cuatro dígitos usando `YYYY`.
## Notas prácticas
– `TO_DATE` convierte texto a fecha; no debe usarse para comparar fechas convirtiéndolas antes a texto.
– El formato debe coincidir con la cadena recibida.
– Para mostrar una fecha como texto se usa `TO_CHAR`, no `TO_DATE`.
– Para ver más máscaras disponibles, se puede consultar la entrada de formatos de fechas en Oracle.
## Entradas relacionadas
– Formatos de fechas en Oracle
– La función TO_CHAR de Oracle
