Avatar billede obhat Nybegynder
01. april 2006 - 07:22 Der er 30 kommentarer og
1 løsning

Order by data

Er det muligt at sortere et udtræk efter dato? Altså Order by dato?
Jeg har nemlig bemærket at 01-04-2006 22:00 kommer efter 31-03-2006 22:00
Avatar billede Slettet bruger
01. april 2006 - 07:31 #1
Ja det er skam muligt...

du skal bare sørge for at dit datofelt har formatet "Dato og klokkeslæt" og så kan du for eksempel skrive:

"select * from tabel order by dato"

eller hvis den ældste dato skal komme først skal det være:

"select * from tabel order by dato DESC"

\Dan
Avatar billede obhat Nybegynder
01. april 2006 - 07:36 #2
Feltet har formatet varchar duer det ikke?
Avatar billede nielle Nybegynder
01. april 2006 - 08:23 #3
Hvis dit felt er et varchar(16), og du sortere efter 'dato DESC' så skal data komme ud som:

31-03-2006 22:00
01-04-2006 22:00

Desc betyder nemlig at tingene skal sorteres i faldende orden, og den viste sortering er faktisk i faldende *alfabetisk* orden (tegnet '0' ligger før tegnet '9').

Stigende orden fås ved at sortere med 'dato ASC', men så får du bare nogle andre problemer senere; Med alfabetisk sortering kommer alle poster som starter med ”01” nemlig før alle poster som starter med ”31”:

01-04-2006 22:00
01-12-2010 00:13
31-03-2006 22:00

Den eneste rigtige måde at gemme en dato-værdi, hvis man senere ønsker at kunne sortere korrekt på den, er at have feltet som et datetime-felt. Som en øget bonus fylder sådan et felt ovenikøbet mindre i databasen.

Men helt generelt gælder der altså at: Felttyper bør altid stemme overens med den type data man har i dem.
Avatar billede Slettet bruger
01. april 2006 - 08:27 #4
Hvis dine datoer er formateret som du viser og de er gemt i varchar felter så kan du ikke sorterer dem korrekt. Du bliver nød til at få dem konverteret til datetime typer.
Avatar billede eagleeye Praktikant
01. april 2006 - 09:46 #5
Du kan konvertere text til dato i SQL sætningen eks med acces: order by CDate(dato)
Avatar billede obhat Nybegynder
01. april 2006 - 10:43 #6
Jeg vil nødig til at ændre formatet, da alle udtræk så ændres grafisk, det vil jeg være ked af, så >> eagleeye hvordan skal jeg forstå CDate(dato)

Min sql ser således ud:
"select * from tabel ORDER BY dato DESC LIMIT 10"
Avatar billede eagleeye Praktikant
01. april 2006 - 10:52 #7
Ok så du bruger MYSQL så det ikke CDate du skal bruge da den kun virker i Access.

MySQLs bruger dato formaetet yyyy-mm-dd. Det lader til MySQL har en som kan konvertere en streng som din til en dato.

SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));


Så prøv med dette:

"select * from tabel ORDER BY STR_TO_DATE (dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 10"
Avatar billede erikjacobsen Ekspert
01. april 2006 - 10:56 #8
En ORDER BY med en beregning, som fx STR_TO_DATE eller CDate, er langsom, og alt for langsom hvis du har store mængder af data.

Du skal lave dit felt om til den rigtige type, og bruge STR_TO_DATE eller tilsvarende til en engangskonvertering, og så fx lade din ASP konvertere til og fra den visning brugeren skal se.
Avatar billede obhat Nybegynder
01. april 2006 - 18:03 #9
Gider du skære det ud i pap?
Skal STR_TO_DATE skrives i sql'en?

Og hvordan får jeg bagefter udtrækker til at stå som:
31-03-2006 22:00
Avatar billede eagleeye Praktikant
01. april 2006 - 19:21 #10
Ja den skal ind i SQL sætningen, og den skal være i ORDER BY delen. Hvis din kolonne hedder dato skal ORDER BY se sådan her ud:

ORDER BY STR_TO_DATE (dato, GET_FORMAT(DATETIME,'USA')) DESC
Avatar billede obhat Nybegynder
01. april 2006 - 20:05 #11
Og formatet skal være datetime ?
Avatar billede eagleeye Praktikant
01. april 2006 - 20:08 #12
Den konverter kolonne dato af typen text/vchar til datetime.
Avatar billede obhat Nybegynder
01. april 2006 - 20:11 #13
okay, så vil det være alt, det prøver jeg
Avatar billede obhat Nybegynder
01. april 2006 - 20:16 #14
Må jeg lige spørge, skal det stå DATETIME USA ?
Avatar billede obhat Nybegynder
01. april 2006 - 20:21 #15
Generer fejl:

'(dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 0,10' at l
Avatar billede eagleeye Praktikant
01. april 2006 - 20:22 #16
For at få den til at sortere datoerne rigtigt, og USA er en standart sternge for DATE_FORMAT se linket.
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
Avatar billede eagleeye Praktikant
01. april 2006 - 20:23 #17
skriver den ikke andet?
Avatar billede obhat Nybegynder
01. april 2006 - 20:29 #18
Hele sql'en kommer ud sådan her:

SELECT * FROM bruger WHERE gogkendt = '1' ORDER BY STR_TO_DATE (dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 0,10
Avatar billede obhat Nybegynder
03. april 2006 - 23:32 #19
ok kommer ikke videre
Avatar billede eagleeye Praktikant
04. april 2006 - 00:27 #20
hvilken fejl giver den må da skrive noget mere en:
'(dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 0,10' at l
Avatar billede obhat Nybegynder
05. april 2006 - 07:23 #21
Nej, det er den fejl der kommer ud
Avatar billede obhat Nybegynder
05. april 2006 - 21:48 #22
Jeg har prøvet tusinde gange, jeg ved ikke hvad jeg skal gøre. den fejler med dette hver gang.

[MySQL][ODBC 3.51 Driver][mysqld-4.0.17-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 0,15' at line 1
Avatar billede nielle Nybegynder
05. april 2006 - 22:07 #23
Hvordan ser din kode ud?
Avatar billede erikjacobsen Ekspert
05. april 2006 - 22:14 #24
Det kan man nu se ud af den kode han viser. Ikke mellemrum mellem STR_TO_DATE og (  - de skal stå klods op af hinanden. Men det er fortsat en dum idé at lave beregninger i forbindelse med ORDER BY. Den eneste rigtige løsning er at vælge de rigtige felttyper. Men hvad ved jeg om det ... :)
Avatar billede obhat Nybegynder
06. april 2006 - 07:46 #25
Hvad er den store forskel med felttyper i virkeligheden?
Avatar billede obhat Nybegynder
06. april 2006 - 07:49 #26
Fjerner jeg mellemrummet, komme samme fejl :(
Avatar billede erikjacobsen Ekspert
06. april 2006 - 08:49 #27
Vil du så ikke godt vise hvad den skriver? Det kan da godt være, der kommer en fejl, men mon det nu er den samme?
Avatar billede obhat Nybegynder
06. april 2006 - 15:22 #28
Det er denne fejl >> erikjacobsen:

[MySQL][ODBC 3.51 Driver][mysqld-4.0.17-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 0,15' at line 1
Avatar billede erikjacobsen Ekspert
06. april 2006 - 18:55 #29
Ok, og din SQL-sætning ?
Avatar billede obhat Nybegynder
07. april 2006 - 08:27 #30
Sql'en

SELECT * FROM bruger WHERE gogkendt = '1' ORDER BY STR_TO_DATE(dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 0,15
Avatar billede obhat Nybegynder
09. april 2006 - 09:13 #31
Okay, ingen kan klare dette problem. så lukker
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
Kurser inden for grundlæggende programmering

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