Avatar billede Slettet bruger
14. september 2004 - 19:54 Der er 9 kommentarer og
1 løsning

Sortering af tekstfelt indholdende tal

Hej

Jeg har et felt af datatypen "text" i en mysql-database.

Feltet bruges som overskrift til et emne i et forum.

Laver jeg eks. 3 overskrifter som følger:
Overskrift 1
Overskrift 2
Overskrift 11

Bruger jeg en 'ORDER BY felt ASC' vil sorteringen være forkert:
Overskrift 1
Overskrift 11
Overskrift 2

Et det muligt at få SQL til at sortere "rigtigt"?
Avatar billede arne_v Ekspert
14. september 2004 - 19:57 #1
Prøv:

ORDER BY CAST(SUBSTRING(feltnavn,10,4) AS INTEGER) ASC
Avatar billede arne_v Ekspert
14. september 2004 - 19:58 #2
ORDER BY CAST(SUBSTRING(feltnavn,11,4) AS INTEGER) ASC

vist
Avatar billede Slettet bruger
14. september 2004 - 20:02 #3
arne_v...> Overskrifterne var bare eksempler. De behøver desværre ikke altid være så "systematiske".

Overskrifterne laver brugerne selv, og ved da heller ikke om der kan kommer en stribe overskrifter der er nummereret fra 1-11 eller noget i den retning, men hvis det er muligt ville det være rart at sorteringen ville blive "korrekt", hvis altså det er tallene man kigger på.
Avatar billede arne_v Ekspert
14. september 2004 - 20:05 #4
Hvis det altid er
  et ord + et mellemrum + et tal
så må du kunne bruge
  ORDER BY CAST(SUBSTRING(feltnavn,LOCATE(' ',feltnavn),LENGTH(feltnavn)-LOCATE(' ',feltnavn)) AS INTEGER) ASC
Avatar billede arne_v Ekspert
14. september 2004 - 20:07 #5
Hvis det heller ikke duer, så tror jeg at du bliver nødt til at løs eproblemet
på anden vis f.eks. ved at gemem det tal i en et seperat felt.
Avatar billede Slettet bruger
14. september 2004 - 20:07 #6
Det vil kunne springe.

Eks:
"Sådan vinder vi 1"
"Dagens kamp 1"
"Dagens kamp1"
"Det er slut 1"
"Der er ingen huller i banen 11"
Avatar billede arne_v Ekspert
14. september 2004 - 20:10 #7
Det kræver en REVERSE_LOCAT Esom MySQL ikke har.
Avatar billede arne_v Ekspert
14. september 2004 - 20:11 #8
Eller dog.

Prøv:

ORDER BY CAST(SUBSTRING(feltnavn,LENGTH(feltnavn)-LOCATE(' ',REVERSE(feltnavn)),LOCATE(' ',REVERSE(feltnavn))) AS INTEGER) ASC

måske virker det
Avatar billede Slettet bruger
16. september 2004 - 21:17 #9
Hmmm.... får en sql-fejl.

Nu er det heller ikke fordi det er et enormt problem, men med min ringe viden indenfor alt andet end normale forespørgsler, tror jeg vi begynder at bevæge os ud i en form for overdrev ;o)

Anyway skal du have tak for opklaringsarbejdet.

Læg et svar og pointene er dine :o)
Avatar billede arne_v Ekspert
16. september 2004 - 21:18 #10
ok
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