es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El formato SQL order by datetime en dd.MM.yyyy no es correcto.

Tengo problemas para ordenar mis datos en el orden correcto. He intentado diferentes combinaciones pero todas devuelven los datos de manera incorrecta. La columna de fecha está en formato datetime. Algunos códigos que he intentado:

SELECT CONVERT(VARCHAR(10), recibidoFecha, 104) as día
FROM tabla
GROUP BY CONVERT(VARCHAR(10), recibidoFecha, 104)
ORDER BY CONVERT(VARCHAR(10), recibidoFecha, 104)

Devuelve los datos como:

01.02.2021
01.03.2021
01.04.2021
02.02.2021
02.03.2021
...

He intentado:

SELECT FORMAT(CONVERT(DATETIME, CONVERT(VARCHAR(10), recibidoFecha, 121)),'dd.MM.yyyy')
FROM tabla
GROUP BY FORMAT(CONVERT(DATETIME, CONVERT(VARCHAR(10), recibidoFecha, 121)),'dd.MM.yyyy')
ORDER BY FORMAT(CONVERT(DATETIME, CONVERT(VARCHAR(10), recibidoFecha, 121)),'dd.MM.yyyy')

Que devuelve los mismos resultados.

Pero lo que quiero es:

01.01.2021
02.01.2021
03.01.2021
01.02.2021

Y así sucesivamente. Realmente no sé por qué agrupa todos los meses y luego los ordena por día.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en el tipo de dato de la columna recievedDate. Debido a que está en formato datetime, es posible que el ordenamiento no se esté realizando como se espera al utilizar la función CONVERT.

    Una posible solución podría ser utilizar la función DATEPART para extraer el día, mes y año por separado, y luego concatenarlos en el orden deseado.

    Por ejemplo:

    SELECT CONVERT(VARCHAR(10), DATEPART(day, recievedDate)) + '.' +
           CONVERT(VARCHAR(10), DATEPART(month, recievedDate)) + '.' +
           CONVERT(VARCHAR(10), DATEPART(year, recievedDate))
           as formatoFecha
    FROM tabla
    ORDER BY recievedDate
    

    Esto debería darte los valores de fecha en el orden correcto, sin agruparlos por mes. La cláusula ORDER BY está utilizando la columna original recievedDate para ordenar los resultados en orden ascendente.

    Además, puedes modificar el formato de la cadena concatenada para que se ajuste al formato de salida deseado. ¡Espero que esto te ayude!

Comments are closed.