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

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
SQL2000 og sortering
Fra : Crazy


Dato : 10-05-11 01:51

Jeg har en kolonne hvori jeg kan have følgende værdier:

Version:
1
1.2
1.2.7
1.2.8
1.2.9
1.2.10

Når jeg tager en alm. "SORT BY Version" får jeg følgende liste:

1
1.2
1.2.10
1.2.7
1.2.8
1.2.9

Det er jo som sådan korret, set fra databasens sysnpunkt, men som
nogen måske kan gætte vil jeg gerne have sorteret det korrekt - er det
muligt?

Med en IP adresse kan jeg gøre det vha. noget CAST, men dér er der jo
altid 3 punktummer (fast format), hvor dette kan være alt lige fra
"1" (uden punktum) til f.eks. "1.2.3.4.5".

 
 
Leif Neland (12-05-2011)
Kommentar
Fra : Leif Neland


Dato : 12-05-11 10:33

Crazy wrote:
> Jeg har en kolonne hvori jeg kan have følgende værdier:
>
> Version:
> 1
> 1.2
> 1.2.7
> 1.2.8
> 1.2.9
> 1.2.10
>
> Når jeg tager en alm. "SORT BY Version" får jeg følgende liste:
>
> 1
> 1.2
> 1.2.10
> 1.2.7
> 1.2.8
> 1.2.9
>
> Det er jo som sådan korret, set fra databasens sysnpunkt, men som
> nogen måske kan gætte vil jeg gerne have sorteret det korrekt - er det
> muligt?
>
> Med en IP adresse kan jeg gøre det vha. noget CAST, men dér er der jo
> altid 3 punktummer (fast format), hvor dette kan være alt lige fra
> "1" (uden punktum) til f.eks. "1.2.3.4.5".

Det er en ret besværlig ting...

Måske kan man lave en funktion, der laver funktionummeret om til en streng,
og definerer at der er et maksimum antal punktummer, og et maksimum antal
cifre i hver "versionsdel".
Så 1 bliver til 00000000010000000000000000000000000000000000000000
1.2 bliver til 00000000010000000002000000000000000000000000000000
1.2.9 bliver til 00000000010000000002000000000900000000000000000000
1.2.10 bliver 00000000010000000002000000001000000000000000000000
1.2.3.4.5 00000000010000000002000000000300000000040000000005

Og hvad hvis der bliver en 1.2.9a-version?

Kan du ikke sortere på en udgivelsesdato i stedet?

Hvor mange versioner er der? Hvor tit ændrer de sig?
Måske en tabel (ver_to_seq) med versionsnumre som index, og et sorteringstal
som værdi.
Altså, så man ikke sorterer på versionsnummer men joine med ver_to_seq

Så kan man lave et program til at lave dette sorteringstal, trigget på en
opdatering (kun insert?) af produkttabellen; hvis versionsnummeret ikke
findes i ver_to_seq, starter en nysortering.

Så skal man bare have en funktion, der kan sammenligne to versionsnumre og
beslutte hvilken, der er størst, og bruge denne function som callback i en
generel sorteringsfunktion.


Leif



Birger Sørensen (12-05-2011)
Kommentar
Fra : Birger Sørensen


Dato : 12-05-11 11:50

Crazy har bragt dette til verden:
> Jeg har en kolonne hvori jeg kan have følgende værdier:
>
> Version:
> 1
> 1.2
> 1.2.7
> 1.2.8
> 1.2.9
> 1.2.10
>
> Når jeg tager en alm. "SORT BY Version" får jeg følgende liste:
>
> 1
> 1.2
> 1.2.10
> 1.2.7
> 1.2.8
> 1.2.9
>
> Det er jo som sådan korret, set fra databasens sysnpunkt, men som
> nogen måske kan gætte vil jeg gerne have sorteret det korrekt - er det
> muligt?
>
> Med en IP adresse kan jeg gøre det vha. noget CAST, men dér er der jo
> altid 3 punktummer (fast format), hvor dette kan være alt lige fra
> "1" (uden punktum) til f.eks. "1.2.3.4.5".

Det er vist et velkendt problem.
Du skriver det ikke - men det er formentlig et tekst felt det handler
om. Sorteringen er alfabetisk - og den er helt rigtig, men ikke det du
vil have.
Og der findes vist ingen generel løsning på det problem. Umiddelbart er
det noget med at behandle data som tal i stedet for bogstaver, men det
ligger ikke lige for med alle de punktummer.

Umiddelbart er det opbygningen af databasen der er forkert - du skal
bruge en attribut for hver mulig plads i versionsnummeret - som du
kommer til at begrænse - hver med en default værdi på 0.
Så kan du behandle dem som tal, og få dem sorteret direkte med en ORDER
BY.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



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

Månedens bedste
Årets bedste
Sidste års bedste