Pregunta:
Fecha: 15-03-2017 13:51:06
(En Español)
Ejemplo:
MI TABLA
12/03/2017
01/01/2017
26/02/2017
04/03/2017
RESULTADO AL CUAL QUIERO LLEGAR
01/01/2017
26/02/2017
04/03/2017
12/03/2017
ya que con la consulta tradicional me la ordena solo por el día, yo necesito ordenarla por día, mes y año. Votos: 2 - Respuestas: 7 - Vistas: 18 Compartir en: Google Facebook Twitter LinkedIn Link
Ordenar una tabla MySQL a partir de una fecha con el formato día/mes/año[Resuelta]
Mi duda es cómo podría realizar la consulta MySQL para ordenar una tabla a partir de una fecha?Ejemplo:
MI TABLA
12/03/2017
01/01/2017
26/02/2017
04/03/2017
RESULTADO AL CUAL QUIERO LLEGAR
01/01/2017
26/02/2017
04/03/2017
12/03/2017
ya que con la consulta tradicional me la ordena solo por el día, yo necesito ordenarla por día, mes y año. Votos: 2 - Respuestas: 7 - Vistas: 18 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 15-03-2017 15:22:30 Podrías compartirnos que tipo de dato es tu campo? Votos: 1 - Link respuesta
-
-
Fecha: 16-03-2017 03:12:38 Buenos días Moises, observa que si la fecha la ordenas como un número año, mes y día (AAAAMMDD) puedes ordenar tu tabla naturalmente, veamos:
TABLA
fecha fecha_ordenada 12/03/2017 20170312 01/01/2017 20170101 26/02/2017 20170226 04/03/2017 20170304
Nota: la tabla anterior te la doy a modo de ejemplo, pero no es necesario que la columna "fecha_ordenada" sea parte de tu SELECT
Tu consulta podría ser algo así:
SELECT fecha FROM tabla ORDER BY CONCAT(SUBSTRING_INDEX(fecha , '/', -1),SUBSTRING_INDEX(SUBSTRING_INDEX(fecha , '/', 2), '/', -1),SUBSTRING_INDEX(fecha , '/', 1)) ASC;
Explicación:
Como en MySQL no contamos con una función nativa para realizar "split" de nuestros string, debemos emular ese comportamiento por medio de la función SUBSTRING_INDEX, y finalmente utilizando CONCAT unimos todo.
Veamos como se confecciona ese ORDER BY por partes:
SELECT '16/03/2017'; -- utilizo una fecha específica para el ejemplo SELECT SUBSTRING_INDEX( '16/03/2017' , '/', 1) AS 'dia'; SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('16/03/2017' , '/', 2), '/', -1) AS 'mes'; SELECT SUBSTRING_INDEX( '16/03/2017' , '/', -1) AS 'ano';
Observa que en las consultas anteriores tienes todo el desglose, veamos como queda concatenado:
SELECT CONCAT(SUBSTRING_INDEX('16/03/2017' , '/', -1), SUBSTRING_INDEX(SUBSTRING_INDEX('16/03/2017' , '/', 2), '/', -1), SUBSTRING_INDEX('16/03/2017' , '/', 1)) AS 'fecha_ordenada';
Espero que mi respuesta te sea de ayuda.
Saludos y buen código! Votos: 4 - Link respuesta -
-
Fecha: 16-03-2017 07:05:14 Usando STR_TO_DATE():
SELECT fecha FROM fechas ORDER BY STR_TO_DATE(fecha,'%d/%m/%Y');
STR_TO_DATE()
Pruebalo y nos cuentas. Votos: 7 - Link respuesta -
Fecha: 16-03-2017 09:20:52 Dos sugerencias:
1. Si estás almacenando una fecha entonces el tipo de dato de tu campo debería ser date.
2. Si no lo puedes cambiar entonces sugiero que sigas la recomendación de Kip 13 pues es una solución más limpia.
Saludos! Votos: 3 - Link respuesta -
Fecha: 16-03-2017 09:34:32 Ernesto, concuerdo con lo dicho, no solo la solución de Kip 13 es mejor por limpia, sino que también estimo será más óptima a nivel performance, donde yo ejecuto 5 funciones él ejecuta tan solo una.
Muchas gracias a todos por sus comentarios y aportes, un placer compartir con ustedes!
Saludos y buen código ;) Votos: 3 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión