Avatar billede allandk Nybegynder
03. februar 2010 - 21:57 Der er 3 kommentarer og
1 løsning

Fejler i sortering af dato yyyy-mm-dd

Jeg skriver:

SELECT event_date,DATE_FORMAT(event_date, '%m/%d') AS event_date_temp
FROM wishlist_events_reminder
ORDER BY (DAYOFYEAR(event_date)-DAYOFYEAR(NOW())+365)%365 ASC
LIMIT 4


Jeg får:

2010-04-04 -> 04/04
2010-07-26 -> 07/26
2100-12-24 -> 12/24 HOVSADASSE!
2010-01-31 -> 01/31

Nogen bud?
04. februar 2010 - 04:17 #1
Skip '+365'. 

Du faar det rigtige resultat ved denne query:

SELECT event_date,DATE_FORMAT(event_date, '%m/%d') AS event_date_temp
FROM wishlist_events_reminder
ORDER BY (DAYOFYEAR(event_date)-DAYOFYEAR(NOW()))%365 ASC
LIMIT 4

ja self ved at skippe %365 ogsaa:

SELECT event_date, DATE_FORMAT( event_date, '%m/%d' ) AS event_date_temp
FROM allandk
ORDER BY DAYOFYEAR( event_date ) - DAYOFYEAR( NOW( ) )
LIMIT 4

De giver begge:

event_date  event_date_temp 
2010-01-31 01/31
2010-04-04 04/04
2010-07-26 07/26
2100-12-24 12/24

2010-01-31 - DAYOFYEAR(NOW()) = -4 og -4%365 = -4, den mindste af de fire vaerdier, men (2010-01-31 - DAYOFYEAR(NOW()) = 361 hvilket er den stoerste af de fire vaerdier.  Din kode sorterer datoerne ifoelge afstanden fra DAYOFYEAR(NOW()) og ikke ifoelge afstanden fra nytaar.
04. februar 2010 - 07:21 #2
Eller har jeg misforstaaet?  Vil du have afstanden fra idag men du var overrasket over at 2100-12-24 laa foer 2010-01-31?  Det er fordi du ikke bruger aarstallet i din ORDER BY.
Avatar billede allandk Nybegynder
04. februar 2010 - 16:14 #3
Tak for svaret Christian_Belgien - nu er jeg både kommet videre og har forstået hvorfor. Og ja, jeg var overrasket - godt set ;-)
Avatar billede arne_v Ekspert
05. februar 2010 - 18:39 #4
Hvis aarstallet har betydning, saa kan det hele vel simplificeres til:

... ORDER BY event_date

?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester