Nueva pregunta

Pregunta:

Fecha: 15-03-2017 13:51:06 (En Español)

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.
Etiquetas: MySQL - MySQL Desarrollo - Pregunta - Query - SQL 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:09:50 Varchar   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 03:39:26 Muchas Gracias Fernando me funciono   Votos: 2 - Link respuesta
     
  •  
      7  
     
    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
 
frjcbbae garagebible.com