sql >> Database >  >> RDS >> Sqlserver

Sorteer op aflopende datum - maand, dag en jaar

Ik gok EventDate is een char of varchar en geen datum, anders zou je bestelling per clausule in orde zijn.

U kunt CONVERT gebruiken om de waarden naar een datum te wijzigen en daarop te sorteren

SELECT * 
FROM 
     vw_view 
ORDER BY 
   CONVERT(DateTime, EventDate,101)  DESC

Het probleem daarmee is, zoals Sparky in de opmerkingen aangeeft, als EventDate een waarde heeft die niet kan worden geconverteerd naar een datum waarop de query niet kan worden uitgevoerd.

Dit betekent dat u de slechte rijen moet uitsluiten of de slechte rijen onderaan de resultaten moet laten staan

Om de slechte rijen uit te sluiten, voegt u gewoon WHERE IsDate(EventDate) = 1 . toe

Om de slechte datums naar beneden te laten gaan, moet je CASE . gebruiken

bijv.

ORDER BY 
    CASE
       WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101)
       ELSE null
    END DESC


  1. Solr - DIH definieert en importeert veel-op-veel velden

  2. Tablesample en andere methoden om willekeurige tuples te krijgen

  3. Hoe een externe sleutel in SQL toe te voegen?

  4. Hoe MySQL-dump van host naar Docker-container te herstellen