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 DESC
lijkt 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 EventDate
een 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. date
als 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