¿Cómo cambiar el formato de fecha en MySQL?

Cambiar Formato de Fecha en Bases de Datos

Valoración: 4.37 (8047 votos)

El manejo de fechas es una tarea fundamental en cualquier sistema de gestión de bases de datos. A menudo, los datos de fecha y hora se almacenan en un formato estándar interno, pero necesitamos mostrarlos o procesarlos en una variedad de formatos diferentes para informes, interfaces de usuario o intercambios de datos con otras aplicaciones. Cambiar el formato de fecha es una habilidad esencial para cualquier desarrollador o administrador de bases de datos. Aunque el concepto es similar, las funciones y sintaxis específicas varían significativamente entre diferentes sistemas de bases de datos como MySQL y SQL Server. Comprender estas diferencias y cómo aplicar las herramientas correctas es clave para trabajar eficientemente con datos temporales.

Índice de Contenido

Cambio de Formato de Fecha en MySQL

En MySQL, la función principal para formatear un valor de fecha o fecha y hora en una cadena con un formato específico es DATE_FORMAT(). Esta función toma dos argumentos: el valor de fecha o fecha y hora que deseas formatear y una cadena que define el formato de salida deseado. Es extremadamente flexible gracias a la gran cantidad de especificadores de formato que soporta.

¿Cómo cambiar el formato de fecha en MySQL?
La función `DATE_FORMAT()` de MySQL se utiliza para formatear una fecha según lo especificado por una cadena de formato. Permite convertir datos de fecha y hora a un formato legible o a un formato específico requerido por la aplicación.

La sintaxis básica es:

DATE_FORMAT(fecha, formato)

Donde fecha es una expresión de fecha o fecha y hora válida, y formato es una cadena que contiene especificadores que comienzan con un signo de porcentaje (%). MySQL reemplaza estos especificadores con las partes correspondientes de la fecha.

Algunos de los especificadores de formato más comunes incluyen:

  • %Y: Año con cuatro dígitos (ej. 2023)
  • %y: Año con dos dígitos (ej. 23)
  • %m: Mes numérico (01 a 12)
  • %c: Mes numérico (1 a 12)
  • %M: Nombre completo del mes (ej. January)
  • %b: Nombre abreviado del mes (ej. Jan)
  • %d: Día del mes numérico (01 a 31)
  • %e: Día del mes numérico (1 a 31)
  • %W: Nombre completo del día de la semana (ej. Sunday)
  • %a: Nombre abreviado del día de la semana (ej. Sun)
  • %H: Hora (00 a 23)
  • %h: Hora (01 a 12)
  • %I: Hora (01 a 12)
  • %i: Minutos (00 a 59)
  • %s: Segundos (00 a 59)
  • %p: AM o PM
  • %r: Hora en formato 12 horas (hh:mm:ss AM/PM)
  • %T: Hora en formato 24 horas (hh:mm:ss)
  • %D: Día del mes con sufijo en inglés (1st, 2nd, 3rd, ...)

Veamos algunos ejemplos prácticos:

SELECT DATE_FORMAT('2023-10-27', '%d/%m/%Y'); -- Resultado: '27/10/2023' SELECT DATE_FORMAT('2023-10-27 14:30:00', '%W, %M %D, %Y %h:%i %p'); -- Resultado: 'Friday, October 27th, 2023 02:30 PM' SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %T'); -- Resultado: Formato ISO 8601 de la fecha y hora actuales SELECT DATE_FORMAT('2023-03-15', '%d-%b-%Y'); -- Resultado: '15-Mar-2023' 

Además de DATE_FORMAT() para convertir fechas a cadenas, MySQL también proporciona STR_TO_DATE() para convertir cadenas a valores de fecha o fecha y hora. Esto es útil cuando tus fechas están almacenadas como texto en un formato no estándar y necesitas convertirlas a un tipo de dato temporal para realizar operaciones de fecha.

La sintaxis es:

STR_TO_DATE(cadena, formato)

Donde cadena es la cadena de texto que representa la fecha y formato es la cadena que describe el formato de la cadena de entrada, utilizando los mismos especificadores que DATE_FORMAT().

Ejemplo:

SELECT STR_TO_DATE('27/10/2023', '%d/%m/%Y'); -- Resultado: '2023-10-27' SELECT STR_TO_DATE('January 15, 2023', '%M %d, %Y'); -- Resultado: '2023-01-15' SELECT STR_TO_DATE('15-Mar-2023', '%d-%b-%Y'); -- Resultado: '2023-03-15' 

El uso correcto de estas funciones es crucial para garantizar que los datos de fecha se manejen e interpreten correctamente.

¿Qué es date() en SQL?
Las funciones de fecha ayudan a formatear fechas y a realizar cálculos relacionados con ellas en los datos . Normalmente, solo son efectivas con tipos de datos con formato de fecha en SQL.

Manejo de Formatos de Fecha en SQL Server

SQL Server ofrece varias maneras de trabajar con formatos de fecha, siendo la función CONVERT() la herramienta más potente y utilizada para este propósito, especialmente para formatear fechas para la salida. A diferencia de MySQL, SQL Server utiliza códigos de estilo numéricos para definir los formatos de fecha y hora.

La sintaxis de CONVERT() para fechas es:

CONVERT(TipoDatoDestino, Expresion, Estilo)

Donde TipoDatoDestino es el tipo de dato al que quieres convertir (por ejemplo, VARCHAR para obtener una cadena formateada), Expresion es el valor de fecha o fecha y hora, y Estilo es un número entero que especifica el formato de salida.

El tipo de dato date en SQL Server almacena la fecha en un formato interno y su representación por defecto cuando se convierte implícitamente a cadena (por ejemplo, en un SELECT simple) es yyyy-MM-dd. Este formato es el estándar ISO 8601, que es reconocido internacionalmente y evita ambigüedades.

Sin embargo, para obtener otros formatos, utilizamos CONVERT() con diferentes estilos. Aquí hay una tabla de algunos estilos comunes para la conversión a VARCHAR (los estilos pueden variar si se utilizan con NVARCHAR):

EstiloFormato de SalidaEjemplo
101mm/dd/yyyy10/27/2023
103dd/mm/yyyy27/10/2023
105dd-mm-yyyy27-10-2023
110mm-dd-yyyy10-27-2023
112yyyymmdd20231027
120yyyy-mm-dd hh:mi:ss (24h)2023-10-27 14:30:00
121yyyy-mm-dd hh:mi:ss.mmm (24h)2023-10-27 14:30:00.000
126yyyy-mm-ddThh:mi:ss.mmm (ISO 8601)2023-10-27T14:30:00.000
10mm-dd-yy10-27-23
11yy/mm/dd23/10/27

Ejemplos usando CONVERT():

SELECT CONVERT(VARCHAR, GETDATE(), 103); -- Resultado: '27/10/2023' SELECT CONVERT(VARCHAR, GETDATE(), 120); -- Resultado: '2023-10-27 14:30:00' SELECT CONVERT(VARCHAR, GETDATE(), 112); -- Resultado: '20231027' SELECT CONVERT(VARCHAR, GETDATE(), 108); -- Solo la hora: '14:30:00' SELECT CONVERT(VARCHAR, GETDATE(), 0); -- Valor por defecto (mm dd yyyy hh:miAM/PM): 'Oct 27 2023 2:30PM' 

Para convertir una cadena de texto a un valor de fecha o fecha y hora, también puedes usar CONVERT() o CAST(). SQL Server intentará interpretar la cadena basándose en los formatos estándar y la configuración de idioma y formato de fecha de la sesión actual (establecida con SET LANGUAGE y SET DATEFORMAT).

¿Cómo cambiar el formato de la Fecha?
En la pestaña Inicio , haga clic en el selector de ventana emergente junto a Número. En el cuadro Categoría, haga clic en Fecha y, en la lista Tipo, haga clic en el formato de fecha que desee.

La sentencia SET DATEFORMAT cambia el orden de las partes de la fecha (mes, día, año) para interpretar cadenas de caracteres al convertirlas a tipos de fecha y hora. Por ejemplo:

SET DATEFORMAT dmy; SELECT CAST('27/10/2023' AS DATE); -- Interpreta como Día/Mes/Año -> '2023-10-27' SET DATEFORMAT mdy; SELECT CAST('10/27/2023' AS DATE); -- Interpreta como Mes/Día/Año -> '2023-10-27' 

Sin embargo, para evitar ambigüedades, especialmente al convertir cadenas literales, es altamente recomendable usar formatos estándar como 'yyyy-mm-dd' (ISO 8601, estilo 23 o 120/121 sin hora) o el formato 'yyyy-mm-ddThh:mi:ss.mmm' (ISO 8601, estilo 126), ya que son independientes de la configuración de idioma o SET DATEFORMAT.

Comparativa de Enfoques: MySQL vs. SQL Server

Aunque ambos sistemas permiten manipular formatos de fecha, sus metodologías difieren:

CaracterísticaMySQLSQL Server
Función principal para formatear salidaDATE_FORMAT(fecha, formato)CONVERT(VARCHAR, fecha, estilo)
Definición del formato de salidaEspecificadores de formato (ej. %Y-%m-%d)Códigos de estilo numéricos (ej. 120, 103)
Función para convertir cadena a fechaSTR_TO_DATE(cadena, formato)CONVERT(DATE/DATETIME, cadena, estilo) o CAST(cadena AS DATE/DATETIME)
Influencia de configuración de sesión en interpretación de cadenaMenor, depende del formato en STR_TO_DATESignificativa con SET DATEFORMAT y SET LANGUAGE al usar CAST o CONVERT sin estilo
Formato ISO 8601 (yyyy-mm-dd)Usando %Y-%m-%dFormato por defecto para date. Estilos 23, 120, 121, 126.

En resumen, MySQL usa especificadores de formato en cadenas, mientras que SQL Server se basa en códigos numéricos de estilo, especialmente con la función CONVERT. Para convertir cadenas a fechas, MySQL requiere que especifiques el formato de la cadena de entrada con STR_TO_DATE, mientras que SQL Server puede intentar interpretarla basándose en configuraciones de sesión o un estilo especificado en CONVERT.

Ejemplos Prácticos Adicionales

Aquí tienes más ejemplos que muestran cómo obtener formatos específicos en ambos sistemas:

Formato 'DD/MM/YYYY':

-- MySQL SELECT DATE_FORMAT(NOW(), '%d/%m/%Y'); -- SQL Server SELECT CONVERT(VARCHAR, GETDATE(), 103); 

Formato 'YYYY-MM-DD HH:MI:SS (24h)':

-- MySQL SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %T'); -- SQL Server SELECT CONVERT(VARCHAR, GETDATE(), 120); 

Formato 'Nombre del Mes Día, Año':

-- MySQL SELECT DATE_FORMAT(NOW(), '%M %e, %Y'); -- SQL Server (requiere concatenación o funciones específicas si el idioma no es inglés por defecto) -- Ejemplo básico, puede variar con el idioma SELECT DATENAME(month, GETDATE()) + ' ' + CAST(DAY(GETDATE()) AS VARCHAR) + ', ' + CAST(YEAR(GETDATE()) AS VARCHAR); -- O usando FORMAT (SQL Server 2012+) SELECT FORMAT(GETDATE(), 'MMMM dd, yyyy'); 

Estos ejemplos demuestran la flexibilidad de las funciones en ambos sistemas para adaptarse a diversas necesidades de formato.

Consideraciones Importantes

Al trabajar con formatos de fecha, ten en cuenta lo siguiente:

  • Ambigüedad de Año de Dos Dígitos: Siempre que sea posible, utiliza años de cuatro dígitos (%Y en MySQL, estilos 1xx en SQL Server) para evitar problemas de interpretación, especialmente en rangos de años cercanos al límite del siglo (por defecto 2049 en SQL Server).
  • Almacenamiento vs. Presentación: Los formatos que aplicas con DATE_FORMAT o CONVERT suelen ser para la presentación de los datos. La forma en que la fecha se almacena internamente en la base de datos (como un número o una estructura binaria compacta) es independiente del formato de cadena que elijas para mostrarla.
  • Configuración Regional/Idioma: En SQL Server, las funciones como DATENAME o la interpretación de cadenas literales sin estilo pueden depender de la configuración de idioma de la sesión (SET LANGUAGE). En MySQL, los nombres de meses y días de la semana en DATE_FORMAT también dependen de la configuración regional del servidor.
  • Rendimiento: Aplicar funciones de formato a columnas de fecha en la cláusula WHERE de una consulta puede impedir el uso de índices y afectar el rendimiento. Siempre que sea posible, realiza comparaciones de fechas utilizando el tipo de dato de fecha nativo o rangos de fechas.

Preguntas Frecuentes (FAQ)

¿Cómo convierto una fecha a una cadena de texto con un formato específico?
En MySQL, usa la función DATE_FORMAT(fecha, formato). En SQL Server, usa la función CONVERT(VARCHAR, fecha, estilo).
¿Cómo convierto una cadena de texto que representa una fecha a un tipo de dato de fecha?
En MySQL, usa la función STR_TO_DATE(cadena, formato), especificando el formato de la cadena de entrada. En SQL Server, puedes usar CONVERT(DATE, cadena, estilo) o CAST(cadena AS DATE). Para evitar errores, es mejor usar un formato de cadena de entrada estándar (como 'yyyy-mm-dd') o especificar un estilo en CONVERT.
¿Cuál es el formato de fecha por defecto en MySQL y SQL Server?
El formato estándar para mostrar fechas (cuando se convierte implícitamente a cadena) es yyyy-MM-dd en ambos sistemas, basado en ISO 8601. Sin embargo, SQL Server puede interpretar cadenas de entrada basadas en la configuración de SET DATEFORMAT.
Mis fechas de entrada no se interpretan correctamente en SQL Server. ¿Qué puedo hacer?
Verifica la configuración de SET DATEFORMAT y SET LANGUAGE de tu sesión. Si la cadena de entrada tiene un formato consistente, usa la función CONVERT(DATE, cadena, estilo) especificando el estilo que coincide con el formato de tu cadena de entrada para anular la configuración de la sesión.
¿Puedo usar los mismos códigos de formato en MySQL y SQL Server?
No. MySQL utiliza especificadores basados en % (como %Y, %m, %d), mientras que SQL Server utiliza códigos de estilo numéricos (como 101, 103, 120) principalmente con la función CONVERT.

Conclusión

Manejar y formatear fechas es una operación cotidiana en el trabajo con bases de datos. Tanto MySQL con su función DATE_FORMAT y especificadores, como SQL Server con CONVERT y sus estilos numéricos, ofrecen herramientas robustas para lograrlo. Entender las diferencias entre estos sistemas y dominar el uso de sus respectivas funciones te permitirá controlar con precisión cómo se presentan tus datos temporales, asegurando la claridad, la compatibilidad y la correcta interpretación de la información. Elegir el método adecuado, ya sea para formatear la salida para un informe o para convertir una cadena de entrada a un tipo de dato de fecha, es fundamental para el desarrollo y mantenimiento de aplicaciones de bases de datos eficientes y fiables. Recuerda siempre preferir formatos de fecha estándar como ISO 8601 (yyyy-mm-dd) siempre que sea posible, ya que minimizan la ambigüedad y dependen menos de la configuración regional.

Si quieres conocer otros artículos parecidos a Cambiar Formato de Fecha en Bases de Datos puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir