Avatar billede funkyloonie Nybegynder
09. august 2005 - 09:40 Der er 12 kommentarer og
1 løsning

Sortering af tekst nummerisk

Hej.

Jeg har et problem som jeg ikke umiddelbart tror jeg kan løse ved hjælp af order by, men jeg forsøger lige at høre her.

Jeg har en varchar kolonne i min tabel. Jeg har følgende 2 rows: "best 3020" og "best 325". Når den kolonne sorteres med ASC kommer "best 3020" først da 0 sorteres før 2. Jeg vil dog gerne have at "best 325" kommer først da 325 er mindre end 3020. Er det muligt eller skal jeg kode mig ud af det ?
Avatar billede arne_v Ekspert
09. august 2005 - 09:44 #1
prøv:

SELECT CAST(SUBSTRING(fejl,5,LEN(felt)-4) AS INTEGER) FROM ...
Avatar billede funkyloonie Nybegynder
09. august 2005 - 09:52 #2
hej arne v

Dit foreslag når jeg et stykke med. hvis nu der også er en row som hedder "alfabeta 5800" som forventes at komme først i sorteringen bliver den straks mere kompleks. Er den mulig at bygge ind?
Avatar billede arne_v Ekspert
09. august 2005 - 09:56 #3
nå - de er ikke lige lange !

prøv:

SELECT CAST(SUBSTRING(felt,CHARINDEX(' ',felt),LEN(felt)-CHARINDEX(' ',felt) + 1) AS INTEGER) FROM ...
Avatar billede ldanielsen Nybegynder
09. august 2005 - 09:57 #4
Kan du evt. nå at lave databasestrukturen om? Hvis kolonnen altid er af formen <nogle bogstaver> <et tal>, så kunne man jo lave to kolonner i stedet.

Denne form for sorteringer vil være tunge for serveren, ligegyldigt hvordan du gør det.
Avatar billede funkyloonie Nybegynder
09. august 2005 - 10:09 #5
ja teksterne er 100% variable, det fremgår vist ikke helt af min tekst. Dvs. der kan godt være nogle som ser sådan ud "Alfabeta5800dtc89". Der er ikke nødvendigvis mellemrum i teksten.

Du har dog givet mig et værktøj til at lave noget af sorteringen med og det er dejligt.
Avatar billede arne_v Ekspert
09. august 2005 - 10:13 #6
virker 09:56:12 ikke ?
Avatar billede arne_v Ekspert
09. august 2005 - 10:13 #7
nej ikke når der ikke er mellemrum i det
Avatar billede arne_v Ekspert
09. august 2005 - 10:14 #8
hvad vil du have ud af "Alfabeta5800dtc89" ? 5800 ? 89 ? 580089 ?
Avatar billede funkyloonie Nybegynder
09. august 2005 - 10:18 #9
09:56:12 smed "alfabeta 5800" sidst i sorteringen hvor den skulle være først.

"Alfabeta5800dtc89" skal komme efter "Alfabeta580dtc89".
mens den skal komme før "Alfabeta5800dtc790".

Reglen er at der sorteres først efter bogstaver. Er bogstaverne ens sorteres der efter tallets størrelse og er de ens igen efter bogstaver osv.
Avatar billede funkyloonie Nybegynder
09. august 2005 - 10:21 #10
09:56:12 kan jeg ikke se hvordan jeg skal lave order by.
Avatar billede arne_v Ekspert
09. august 2005 - 10:24 #11
jeg tror at du bliver nødt til at flytte den logik op i applikationen

vi er vist ude over mulighederne i SQL
Avatar billede funkyloonie Nybegynder
09. august 2005 - 10:33 #12
ja det er også min tanke. Muligvis vil jeg splitte ordet op ved oprettelsen så sorteringen er nemmere ellers vil jeg sørge for at de ligger sorteret.
Avatar billede funkyloonie Nybegynder
24. oktober 2005 - 18:59 #13
luk
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