Avatar billede Slettet bruger
12. marts 2008 - 13:14 Der er 7 kommentarer og
1 løsning

Konvertere fra VARCHAR til INT i ORDER BY

Jeg har en tabel, der indeholder en kolonne med INT værdier og enkelte VARCHAR værdier som '100 til 120'. Datatypen er VARCHAR(255).

Kolonnen har altid været tænkt som en INT kolonne... jeg ved ikke hvorfor man har valgt at definere den som VARCHAR(255) (Det er ikke mig, der har skabt databasen).

Men nu har jeg brug for at lave et udtræk, der sorterer efter talværdierne, som man ville sortere efter en INT kolonne.

Kan man lave noget CONVERT / CAST (el lign.) trick... ala

SELECT (kolonnenavne) FROM minTabel ORDER BY CONVERT(minTalKolonne, INT)

- det skal siges at MySQL versionen er  4.0.21-nt, så det er ikke den nyeste hare i skoven.
Avatar billede fennec Nybegynder
12. marts 2008 - 13:30 #1
Tror det bliver svært, men måske du er heldig hvis data står på en bestemt måde.

Ligger alle tal mellem 100 og 999?? Dvs at felterne indeholder "100", "312", "232 til 231". Hvis det er tilfældet kan vi bruge en left(xx,3) til at trække tal ud.

Hvis ikke, skal der noget regexp til, hvis MySQL overhoved understøtter det. Jeg kan kun finde en Match funktion for regexp og den er ikke brugbar. Den skal returnere resultatet og ikke true/false
http://dev.mysql.com/doc/refman/5.0/en/regexp.html
Avatar billede arne_v Ekspert
12. marts 2008 - 14:02 #2
virker CONVERT(kolonne, INT) eller CAST(kolonne AS INT) ikke i 4.0 ??
Avatar billede fennec Nybegynder
12. marts 2008 - 14:11 #3
arne_v >>
Det virker vel ikke på tekst værdien "100 til 120"

som jeg forstår det så har de værdier "100", "200", "100 til 120" i databsen. Detaljen er så at få udtrukket "100" fra "100 til 120", så vi kan konvertere til tal.
Avatar billede arne_v Ekspert
12. marts 2008 - 14:59 #4
ah - saadan

find ham der har designet den tabel struktur og besoeg ham med et baseball bat ....

CAST(SUBSTRING_INDEX(felt,' ',1) AS INTEGER)

var maake vaerd at proeve
Avatar billede Slettet bruger
12. marts 2008 - 15:33 #5
Arne v redder dagen endnu engang. Hvad gjorde vi uden dig?

Den ville dog have UNSIGNED i stedet for INTEGER sikkert pga. den gamle version.

Jeg formoder du smider et svar for point - tak igen!
Avatar billede Slettet bruger
12. marts 2008 - 15:34 #6
I mellemtiden vil jeg lede after et baseball bat eller andet egnet... pyha... kender I det at man bare for smidt noget l... i hovedet: "Her... få lige det til at fungere...".
Avatar billede arne_v Ekspert
12. marts 2008 - 18:33 #7
svar
Avatar billede arne_v Ekspert
12. marts 2008 - 18:34 #8
hvis du vil have det 120 i.s.f. 100 ud af '100 til 120' saa bruger du -1 i.s.f. 1 - MySQL
har nogle lidt syrede funktioner
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