Avatar billede pnr Nybegynder
12. maj 2005 - 15:22 Der er 9 kommentarer og
1 løsning

Hjælp til order by på felt der indeholder tekst og tal

Jeg skal have sorteret nogle produktnavne, den skulle gerne sorteres på alle karakterne i strengen. Hvordan gør jeg det?

eks.

som det er nu får jeg følgende hvis jeg bruger "order by navn":

Kubota 008
Kubota KX 121
Kubota KX 41
Kubota KX 61
Schaeff HR 12

Men jeg vil gerne have følgende sortering

Kubota 008
Kubota KX 41
Kubota KX 61
Kubota KX 121
Schaeff HR 12
Avatar billede apache999 Nybegynder
12. maj 2005 - 15:27 #1
Hvis du har mulighed for at konvertere produktnavnene, så de hedder (eksempelvis)

Kubota KX 041
Kubota KX 061
Kubota KX 121
Schaeff HR 012

Altså således, at de tal, der er strengen altid har samme antal cifre, vil det ikke være nødvendigt at ændre din sql-forespørgsel
Avatar billede pnr Nybegynder
12. maj 2005 - 15:55 #2
Kan det ikke lade sig gøre på andre måder?
Avatar billede ldanielsen Nybegynder
13. maj 2005 - 19:38 #3
Du skal splitte det op. Har alle navnene tre led?
Avatar billede ldanielsen Nybegynder
13. maj 2005 - 19:51 #4
Apache999 > Det ville ikke løse problemet

Der skal være 3 kolonner, med hver sit led af navnet i. I virkeligheden skulle der sikkert være en tabel med Kubota, Schaeff osv., og en anden tabel med HR, KX osv og én med 121, 41, 61 osv, og så skulle de relatere til hinanden
Avatar billede pnr Nybegynder
13. maj 2005 - 22:33 #5
Hej Idanielsen

Nej alle navnene har ikke 3 led, det er forskelligt. Det eksempel jeg har vist består af en producent (Kubota) og et produktnr (KX 121). Jeg vil være ked af at skulle dele navnene op. Er der ikke andre muligheder?
Avatar billede ldanielsen Nybegynder
14. maj 2005 - 13:57 #6
Jo man kunne lave et opslag der, hver gang det køres, undersøger tekststrengen, finder mellemrummene, deler strengen op og sorterer efter de enkelte dele. Det vil bare være en meget tung sag at køre, og det ville kræve at teksten overholder nogle regler, fx at der skal være et bestemt antal mellemrum.

Ser vi på den der hedder Kubota 88, skulle den skrives med to mellemrum:  Kubota  88. Så ville den nemlig stadig kunne siges at have tre led, hvor det midterste blot er tomt.

Her er et bud på et opslag der kan undersøge for to led, det bliver en del mere kompliceret med tre led:

SELECT navn
FROM  Produkter
ORDER BY RTRIM(SUBSTRING(navn + ' ', 1, PATINDEX('% %', navn + ' '))), SUBSTRING(navn, PATINDEX('% %', navn + ' ') + 1, 100)

alt det + ' ' jeg har lavet er for at den ikke fejler med et brag hvis der mangler mellemrum

Jeg vil helt sikkert mene at du skal splitte dem op, helst lave det som to eller flere relaterede tabeller.
Avatar billede pnr Nybegynder
18. maj 2005 - 15:11 #7
Det er lidt surt at det fungere sådan :~/ men det kan du jo ikke gøre for idanielsen ;~} så smid et svar så er der point og mange tak for hjælpen!
Avatar billede ldanielsen Nybegynder
19. maj 2005 - 09:25 #8
Selv tak
Avatar billede pnr Nybegynder
20. maj 2005 - 12:11 #9
Hov apache999 løsning virker for mig :-) Det er ikke den bedste løsning men i mangel på bedre :-)

apache999 smid lige et svar så får du også del i pointne!
Avatar billede pnr Nybegynder
28. maj 2005 - 08:10 #10
HALLO apache999!
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