Tema SQL
STR_TO_DATE() (MySQL / MariaDB)
Parsea una cadena de texto a valor DATE/DATETIME/TIME según una máscara de formato (similar a strptime). Imprescindible cuando el origen no está en ISO 8601 y debes interpretar día/mes/año regional.
Descripción
STR_TO_DATE(cadena, formato) usa especificadores %d, %m, %Y, %H, %i, %s, etc., para indicar el orden y los componentes de la fecha en el texto de entrada. Si la cadena no encaja con la máscara, el resultado es NULL o comportamiento según sql_mode (fechas inválidas pueden volverse NULL o advertencias). Combina con DATE_FORMAT para round-trips de visualización. En importaciones masivas, valida primero en staging y normaliza a tipo DATE/DATETIME nativo para aprovechar índices. No confundir con CAST a DATE cuando el literal ya está en ISO; STR_TO_DATE es para formatos arbitrarios.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
STR_TO_DATE(cadena_texto, formato)
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Máscara
- Usa %d, %m, %Y, %H, %i, %s y variantes según documentación MySQL.
- sql_mode
- NO_ZERO_DATE y modos estrictos afectan fechas imposibles.
- Zona horaria
- STR_TO_DATE no añade zona; combina con CONVERT_TZ si operas en UTC.
Ejemplos
Ejemplo 1
SELECT STR_TO_DATE('10-04-2026', '%d-%m-%Y') AS d;
SELECT STR_TO_DATE('20260410143000', '%Y%m%d%H%i%s') AS ts;
Ejemplo 2
SELECT STR_TO_DATE('15/08/2025 14:30', '%d/%m/%Y %H:%i') AS ts;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.