Bestel op aflopende datum – maand, dag en jaar

Dit lijkt stom, maar ik heb gewoon een lijst met te bestellen datums nodig met de meest recente datum bovenaan. Het gebruik van order by DESClijkt niet te werken zoals ik het wil.

SELECT     *
FROM         vw_view
ORDER BY EventDate DESC

Het geeft me de datum gesorteerd op maand en dag, maar houdt geen rekening met het jaar.
bijvoorbeeld:

12/31/2009 
12/31/2008
12/30/2009
12/29/2009

Moet meer lijken op:

12/31/2009
12/30/2009
12/29/2009
12/28/2009

en ga zo maar door.


Antwoord 1, autoriteit 100%

Ik vermoed dat EventDateeen char of varchar is 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 naar de onderkant van de resultaten moet laten gaan

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

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

Antwoord 2, autoriteit 29%

probeer ORDER BY MONTH(Date),DAY(DATE)

Probeer dit:

ORDER BY YEAR(Date) DESC, MONTH(Date) DESC, DAY(DATE) DESC

Werkte perfect op een JET DB.


Antwoord 3, autoriteit 11%

Je hebt het veld in een string, dus je moet het converteren naar datetime

order by CONVERT(datetime, EventDate ) desc

Antwoord 4, autoriteit 10%

Ervan uitgaande dat je de macht hebt om schemawijzigingen aan te brengen, is het enige acceptabele antwoord op deze vraag IMO om het basisgegevenstype te wijzigen in iets dat meer geschikt is (bijv. dateals SQL Server 2008).

p>

Het opslaan van datums als mm/dd/yyyy-tekenreeksen is ruimte-inefficiënt, moeilijk correct te valideren en maakt sorteren en datumberekeningen onnodig pijnlijk.


Antwoord 5, autoriteit 6%

wat is het type van het veld EventDate, aangezien de volgorde niet correct is, neem ik aan dat je het niet hebt ingesteld op een datum/tijd die het type vertegenwoordigt, maar een tekenreeks. En dan is de Amerikaanse manier om datums te schrijven smerig om te sorteren


Antwoord 6, autoriteit 4%

Als je je datumnotatie hebt geherstructureerd naar JJJJ/MM/DD, dan kun je deze eenvoudige tekenreeksvolgorde gebruiken om de opmaak te krijgen die je nodig hebt.

Als alternatief kunt u de opdracht SUBSTR(store_name,start,length)gebruiken zou de sorteerterm moeten kunnen herstructureren in het bovenstaande formaat

misschien met behulp van de volgende

SELECT     *
FROM         vw_view
ORDER BY SUBSTR(EventDate,6,4) + SUBSTR(EventDate, 0, 5) DESC

Antwoord 7

Probeer dit

SELECT     *
FROM  vw_view
ORDER BY DATE_FORMAT(EventDate, "%m-%d-%y") DESC

Other episodes