06. april 2008 - 16:17Der 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
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
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 :)
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); } } }
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.