Avatar billede mikkelk Nybegynder
06. april 2008 - 16:17 Der er 6 kommentarer og
1 løsning

Sortere alphanumerisk kolonne

Hvis jeg nu har en alphanumerisk kolonne - dvs. en varchar kolonne og gerne vil have den sorteret således at tallenes rækkefølge er vigtigst. Dvs. at resultatet gerne skulle blive således:
1
2
3
10
12
A12
A13
14

Hvordan gør jeg det? En lille detalje er at jeg også kan risikere mere blandede "tal" som f.eks. "A6dG3" - disse vil dog være sjældne og deres placering i rækkefølgen er ikke vigtig.

Håber i kan hjælpe mig, da jeg er gået helt kold i det problem her :-)
/Mikkel
Avatar billede erikjacobsen Ekspert
06. april 2008 - 16:32 #1
Det "kan" man ikke - i hvert fald ikke pænt og SQL-rigtigt.

Lav en ny kolonne med talværdien, og sorter efter den.

1      1
2      2
3      3
A6dG3  6
10    10
12    12
A12    12
A13    13
14    14
Avatar billede HenrikSjang Nybegynder
06. april 2008 - 22:42 #2
Hvis man ikke har mulighed for at lave en ekstra kolonne som erikjacobsen foreslår (hvilket ellers klart er det bedst performende løsning), så kan man lave en funktion til at hjælpe sig.

Hvis man laver en funktion der kan "rense" en tekststreng, og blot returnere de tal der måtte være i den, så kan man gøre sådan her:

select talKolonne
from dinTabel
order by dbo.ExtractNumbers(talKolonne)

Det vil performe dårligt, og det kræver så, at man lige skriver den ExtractNumbers funktion, som givet fx "ab123cd" returner en int med 123. Men jeg ville blot lige nævne muligheden alligevel :)
Avatar billede arne_v Ekspert
07. april 2008 - 04:37 #3
I SQLServer 2005 er det ikke så svært og ikke så langsomt igen fordi man kan bruge en CLR SP.

Til denne opgave:

using System;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

using Microsoft.SqlServer.Server;

namespace E
{
    public class StringUtil
    {
        [SqlFunction]
        public static SqlInt32 FindFirstNumber(string s)
        {
            return int.Parse(Regex.Match(s, @"\d+").Value);
        }
    }
}
Avatar billede mikkelk Nybegynder
14. april 2008 - 21:38 #4
Ja ok. Havde godt nok en mistanke om at det ikke var så enkelt.
arne_v > Det ser interessant ud. Tester det snarest og vender tilbage ang. point.

/Mikkel
Avatar billede arne_v Ekspert
30. august 2008 - 02:25 #5
mikkel ?
Avatar billede mikkelk Nybegynder
30. august 2008 - 10:04 #6
Sorry. Fungerede perfekt. Tak for hjælpen. Smid et svar.
Avatar billede arne_v Ekspert
30. august 2008 - 17:18 #7
svar
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