/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
SQL: Sortering af tal ?
Fra : Jakob Munck


Dato : 07-10-03 10:58

Jeg skal sortere et antal records efter tal i rigtig rækkefølge og de ligger
i en Acces-db i et tekst-felt med navnet "vej_nr". Tallene er f.eks: 8, 5 ,
45, 19, 102. Men de sorteres forkert med denne kode:

SQL = "SELECT * FROM tbMedlemmer ORDER BY vej_nr DESC"
set RS = Conn.Execute(SQL)

De kommer nu ud i følgende rækkefølge:

102, 19, 45, 5, 8

Koden kan altså ikke skelne mellem et- og flercifrede tal, og tager bare
udgangspunkt i det første ciffer, og det duer ikke.

Findes der en bedre SQL-kode til at løse dette problem, eller er man nødt
til at indsætte tallene i 3-ciffer udgave, som 019, 005 etc?

Det bedste er, hvis der findes SQL, som kan sortere rigtigt, for alle andre
løsninger jeg kan overskue, har ulemper på anden vis.

Men findes en sådan SQL?

v.h.
Jakob Munck



 
 
Jesper Stocholm (07-10-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 07-10-03 11:00

Jakob Munck wrote :

> Jeg skal sortere et antal records efter tal i rigtig rækkefølge og de
> ligger i en Acces-db i et tekst-felt med navnet "vej_nr". Tallene er
> f.eks: 8, 5 , 45, 19, 102. Men de sorteres forkert med denne kode:
>
> De kommer nu ud i følgende rækkefølge:
>
> 102, 19, 45, 5, 8
>
> Koden kan altså ikke skelne mellem et- og flercifrede tal, og tager
> bare udgangspunkt i det første ciffer, og det duer ikke.

For at du kan sortere numerisk skal felttypen på det felt du ønsker at
sortere efter være at typen "number" eller anden talværdi. Det du oplever
her skyldes typisk at felttypen er Text.

--
Jesper Stocholm
http://stocholm.dk

Jakob Munck (07-10-2003)
Kommentar
Fra : Jakob Munck


Dato : 07-10-03 11:13

> For at du kan sortere numerisk skal felttypen på det felt du ønsker at
> sortere efter være at typen "number" eller anden talværdi. Det du oplever
> her skyldes typisk at felttypen er Text.
>

Men jeg kan ikke bruge denne felttype, da nogle af numrene har formen:

74 B
22, lejl. 7
56, 1. sal th.

Derfor må jeg bruge en text-felttype. Kan korrekt sortering efter
talstørrelse så ikke lade sig gøre?

v.h.
Jakob Munck



Thomas Due (07-10-2003)
Kommentar
Fra : Thomas Due


Dato : 07-10-03 11:26

Jakob Munck wrote:

> Men jeg kan ikke bruge denne felttype, da nogle af numrene har formen:
>
> 74 B
> 22, lejl. 7
> 56, 1. sal th.
>
> Derfor må jeg bruge en text-felttype. Kan korrekt sortering efter
> talstørrelse så ikke lade sig gøre?

Faktisk så er dine data sorteret korrekt! Det ser bare forkert fordi du
forventer et resultat der er sorteret efter talværdierne. Men da det er
et tekst felt så sorteres efter tekst værdierne, om man så må sige.
Det er der ikke noget at gøre ved, ud over at fylde ud med nuller.

Eksempel på "korrekt" tekst sortering:

0
1
19
2
293
299
3

Hvis det skal se rigtig ud skal tallene "buffes" med nuller:

000
001
002
003
019
293
299

Der er ikke andet at gøre. Alternativet er at omstrukturere din table,
så du kan sorteret på tallene. Så vidt jeg kan regne ud er der tale om
adresser. Uden at kende tabellens opbygning, kunne man for eksempel
gøre det så ledes:

table adresse (
...
gadenavn varchar(50),
nummer integer,
ekstra varchar(50),
...
)



--
Thomas Due
Software Developer
Scanvaegt Nordic A/S
Posted with XanaNews version 1.15.7.2

Jakob Munck (07-10-2003)
Kommentar
Fra : Jakob Munck


Dato : 07-10-03 11:31

>
> 74 B
> 22, lejl. 7
> 56, 1. sal th.
>
> Derfor må jeg bruge en text-felttype. Kan korrekt sortering efter
> talstørrelse så ikke lade sig gøre?
>

Nej, det kan jeg tænke mig til at det ikke kan, da SQL ikke ved hvad der er
tal og hvad der er andre karakterer.

v.h.
Jakob



Jesper Stocholm (07-10-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 07-10-03 11:30

Jakob Munck wrote :

>> For at du kan sortere numerisk skal felttypen på det felt du ønsker
>> at sortere efter være at typen "number" eller anden talværdi. Det du
>> oplever her skyldes typisk at felttypen er Text.
>>
>
> Men jeg kan ikke bruge denne felttype, da nogle af numrene har formen:
>
> 74 B
> 22, lejl. 7
> 56, 1. sal th.

Ligesom du ikke har alle dine data i ét felt, dvs data indsættes som

|Personoplysninger |
--------------------------------------------------
Jesper Stocholm Lyngby Danmark j@stocholm.invalid

Men i stedet har dem som

|Fornavn |Efternavn |By |Land |Email |
---------------------------------------------------------
Jesper Stocholm Lyngby Danmark j@stocholm.invalid

Så bør du i dit tilfælde gøre det samme for din adresse, dvs fx

Gadenummer | Etage | Side |
---------------------------
74 B
22 lejl 7
56 1 th

(eller noget i den retning)

> Derfor må jeg bruge en text-felttype. Kan korrekt sortering efter
> talstørrelse så ikke lade sig gøre?

Umiddelbart vil jeg sige nej. Men hvis du med sikkerhed ved, at formatet
i dine adressedata _ALTID_ er [tal] [mellemrum] [resten af data] kan du
med SQL og regular expressions sortere efter "konvertér data indtil
første mellemrum til int".

Du bør nok spørge om dette i dk.edb.database.ms-access, så jeg sætter FUT
for dette indlæg til den gruppe (jeg følger den ikke).

--
Jesper Stocholm
http://stocholm.dk

Jens Gyldenkærne Cla~ (07-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 07-10-03 11:19

Jesper Stocholm skrev:

> For at du kan sortere numerisk skal felttypen på det felt du
> ønsker at sortere efter være at typen "number" eller anden
> talværdi. Det du oplever her skyldes typisk at felttypen er
> Text.

Man kan godt konvertere direkte i en forespørgsel:

   ... ORDER BY CInt(vej_nr) DESC

- men hvis vej_nr altid er et tal, bør felttypen også være et tal
(det vil i givet fald naturligvis skulle være et heltal).

Hvis vej_nr også kan indeholde et bogstav (42A), er det sværere.
Cint vil give fejl hvis nummeret ikke kan konverteres til et tal.
Det er muligt at det kan løses i en forespørgsel - men det er ikke
nemt. Jeg vil foreslå at lade eventuelle bogstavkoder ligge i deres
eget felt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jakob Munck (07-10-2003)
Kommentar
Fra : Jakob Munck


Dato : 07-10-03 12:23

Tak for hjælpen til jer alle. Jeg har brugt den løsning at lave et særligt
tal-felt med gadenumrene i og desuden et andet tekst-felt med supplerende
bogstav-betegnelser. Det virker fint.

v.h.
Jakob



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste