sql - ultima - Ordenar por fecha descendente-mes, día y año
order by en sql (6)
¿ EventDate
es el tipo del campo EventDate
, ya que el orden no es correcto? Supongo que no lo tiene configurado en algún tipo de fecha / hora, sino en una cadena. Y luego la forma americana de escribir fechas es desagradable de ordenar
Esto parece estúpido pero, simplemente necesito una lista de fechas para ordenar con la fecha más reciente en la parte superior. El uso de order by DESC
no parece estar funcionando como yo quiero.
SELECT *
FROM vw_view
ORDER BY EventDate DESC
Me da la fecha ordenada por mes y día, pero no toma en cuenta el año. por ejemplo:
12/31/2009
12/31/2008
12/30/2009
12/29/2009
Necesita ser más como
12/31/2009
12/30/2009
12/29/2009
12/28/2009
y así.
Si reestructuró su formato de fecha en YYYY / MM / DD, entonces puede usar este sencillo orden de cadena para lograr el formateo que necesita.
Alternativamente, utilizando el SUBSTR(store_name,start,length) , debería poder reestructurar el término de clasificación en el formato anterior
tal vez usando lo siguiente
SELECT *
FROM vw_view
ORDER BY SUBSTR(EventDate,6,4) + SUBSTR(EventDate, 0, 5) DESC
Supongo que EventDate
es un char o varchar y no una fecha, de lo contrario su orden por cláusula estaría bien.
Puede usar CONVERTIR para cambiar los valores a una fecha y ordenar por esa
SELECT *
FROM
vw_view
ORDER BY
CONVERT(DateTime, EventDate,101) DESC
El problema con eso es que, como señala Sparky en los comentarios, si EventDate tiene un valor que no se puede convertir en una fecha, la consulta no se ejecutará.
Esto significa que debe excluir las filas incorrectas o dejar que las filas incorrectas vayan al final de los resultados
Para excluir las filas WHERE IsDate(EventDate) = 1
simplemente añada WHERE IsDate(EventDate) = 1
Para dejar que las fechas incorrectas vayan al final, debes usar CASE
p.ej
ORDER BY
CASE
WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101)
ELSE null
END DESC
Suponiendo que tiene la capacidad de realizar cambios de esquema, la única respuesta aceptable a esta pregunta IMO es cambiar el tipo de datos base a algo más apropiado (por ejemplo, date
SQL Server 2008).
El almacenamiento de fechas como cadenas mm/dd/yyyy
es ineficiente en cuanto al espacio, es difícil de validar correctamente y hace que los cálculos de fecha y clasificación sean innecesariamente dolorosos.
Tiene el campo en una cadena, por lo que deberá convertirlo a datetime
order by CONVERT(datetime, EventDate ) desc
Tratar:
ORDER BY MONTH(Date),DAY(DATE)
EDITAR (Por usuario anónimo.)
Creo que esta publicación está terminada, sin embargo, este usuario anterior ha encontrado algo que resolvió mi problema por encima de todos los demás.
Si alguien está teniendo problemas con las otras soluciones, intente con un mod menor del código anterior.
ORDER BY YEAR(Date) DESC, MONTH(Date) DESC, DAY(DATE) DESC
Este fue mi enfoque final y funcionó perfectamente en un JET DB.
PD. Espero que nadie esté usando Date
como su nombre de campo ;-)