none
Problemas al ordenar datos de una consulta RRS feed

  • Pregunta

  • Buenas. Estoy teniendo un problema en una consulta SQL

    Tengo la siguiente consulta:

    SELECT CONVERT( VARCHAR , Fecha , 103 ) as Fecha, Hora, Nivel, Insulina FROM Registros ORDER BY Fecha asc, Hora asc
    

    Pero el problema es que me ordena mal la fecha. Las que tengo cargadas son del 13/05/2019 al 02/06/2019 (hoy) y me muestra primero las de Junio después las de Mayo. Si en vez de convertir la fecha a String la traigo así como está, anda bien pero queda con el formato "aaaa-mm-dd"

    Como puedo hacer para que me la muestre en formato dd/mm/aaaa y que quede bien ordenada?

    Saludos y gracias :D

    domingo, 2 de junio de 2019 20:18

Respuestas

  • Hola Skull15101996:

    El problema es que estas ordenando por el alias de la columna, por tanto estas ordenando por un varchar y no por una fecha tipo date.

    create table registros (Fecha date, hora time, nivel int, insulina int)
    go
    insert into registros (Fecha, hora, nivel, insulina)
    values
    ('20190513','15:00:00',1,1),
    ('20190602','16:00:00',1,1);
    go
    

    Tu consulta con alias de tabla, y sin alias de tabla.

    SELECT CONVERT(VARCHAR, Fecha, 103) AS Fecha
    	, Hora
    	, Nivel
    	, Insulina
    FROM   
    	Registros
    ORDER BY Fecha ASC
    	  , Hora ASC;
    
    SELECT CONVERT(VARCHAR, Fecha, 103) AS FechaOrdenada
    	, Hora
    	, Nivel
    	, Insulina
    FROM   
    	Registros
    ORDER BY fecha ASC
    	  , Hora ASC;

    Salida

    El motor procesa order by después de select, y cuando te refieres a fecha, el entiende que te refieres a Convert(varchar,fecha,103), por tanto es una cadena y se ordena primero el 02 que el 13

    • Marcado como respuesta Skull15101996 domingo, 2 de junio de 2019 22:52
    domingo, 2 de junio de 2019 21:11

Todas las respuestas

  • Hola Skull15101996:

    El problema es que estas ordenando por el alias de la columna, por tanto estas ordenando por un varchar y no por una fecha tipo date.

    create table registros (Fecha date, hora time, nivel int, insulina int)
    go
    insert into registros (Fecha, hora, nivel, insulina)
    values
    ('20190513','15:00:00',1,1),
    ('20190602','16:00:00',1,1);
    go
    

    Tu consulta con alias de tabla, y sin alias de tabla.

    SELECT CONVERT(VARCHAR, Fecha, 103) AS Fecha
    	, Hora
    	, Nivel
    	, Insulina
    FROM   
    	Registros
    ORDER BY Fecha ASC
    	  , Hora ASC;
    
    SELECT CONVERT(VARCHAR, Fecha, 103) AS FechaOrdenada
    	, Hora
    	, Nivel
    	, Insulina
    FROM   
    	Registros
    ORDER BY fecha ASC
    	  , Hora ASC;

    Salida

    El motor procesa order by después de select, y cuando te refieres a fecha, el entiende que te refieres a Convert(varchar,fecha,103), por tanto es una cadena y se ordena primero el 02 que el 13

    • Marcado como respuesta Skull15101996 domingo, 2 de junio de 2019 22:52
    domingo, 2 de junio de 2019 21:11
  • Muchas Gracias, anduvo perfecto :D
    domingo, 2 de junio de 2019 22:52