Om jag har ett textfält i db som oftast innehåller siffor (tal), men kan innehålla siffra + text oxå. Hej. Om det räcker med att få med siffervärdena kan man göra så här i SQL-server Det är sqlserver (vet inte om det finns nån fix ala oracle...) Om du nöjer dig med att få de rader som innehåller mer än siffror placerade sist i sorteringen så kan du köra följande: Tack CH, blir not det senare alternativet att dela upp kolumnen i två och köra numeriskt i den ena och alfa i den andraSortera textfält i "sifferordning"
Kan man sortera i "sifferordning" ( 1, 2, 7 ,8, 11, 12, 22, 23) så man inte får resultatet: 1, 11, 12, 2, 22, 23, 7 , 8 ...
Man kan ju lägga en nolla framför alla eniffriga tal, men skulle helst vilja slippa det...Sv: Sortera textfält i "sifferordning"
Så här skulle det kunna se ut i en Oracle databas.
Vet inte om translate finns i andra databaser ?
Det som görs nedan är att konvertera A-Ö till nollor med translate
och sedan göra om det till nummerformat.
En fara med detta är att to_number funktionen krashar om
det kommer en endaste litet tecken som den inte kan konvertera
till ett nummeriskt värde.
SELECT name
FROM min_tabell
ORDER BY
TO_NUMBER(
TRANSLATE(UPPERname),
'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ',
'00000000000000000000000000000'
)
), name
/UffeSv: Sortera textfält i "sifferordning"
select strings from
(select strings, isnumeric(strings) isNum from test) as tabellen
where isNum=1
order by convert(int, strings)
strings är ett fält i min tabell
/johan/Sv: Sortera textfält i "sifferordning"
Jag vill ha hela fältet med och inte enbart siffrorna, men jag tror det lutar åt att få köra en update på alla poster...
Tack för svaren i alla fallSv: Sortera textfält i "sifferordning"
SELECT strings FROM tabell
ORDER BY CAST(CASE ISNUMERIC(b) WHEN 1 THEN strings ELSE 2147483647 END AS INT)
Om du vill ha dem på rätt plats (dvs den plats som siffrorna i strängen är) så får du bygga en funktion som kör REPLACE på alla tecken i strängen, och byter ut alla icke-numeriska tecken till en tom sträng.
Dock tycker jag du ska akta dig för att köra en massa funktioner i en order by, eftersom det lär bli table scan då. Bättre att isf ha en extra kolumn av typen int där du lagrar sifferdelen av alla strängarna, och sedan köra order by på den istället, dessutom med ett lämpligt index på den.Sv: Sortera textfält i "sifferordning"