Avatar billede s0mmer Nybegynder
11. februar 2010 - 12:17 Der er 5 kommentarer og
1 løsning

Sortere varchar som decimal

Hej eksperter,

Jeg har et felt i databasen af typen varchar som kun indeholder tal af typen "3,5" "10,5" "64,2" osv osv. (uden "" self). Når jeg sorterer efter dette felt bliver det (af gode grunde) sorteret som var det en streng. Dette ønsker jeg at lave om. Kan jeg caste varchar til decimal under sorteringen? Har prøvet flg:

SELECT    Afkast_1aar
FROM        Afdelinger
ORDER BY CAST(Afkast_1aar AS DECIMAL(13, 2)) DESC

Men uden held.. Kan i hjælpe?
Avatar billede kalp Novice
11. februar 2010 - 12:26 #1
prøv med convert?
Avatar billede kalp Novice
11. februar 2010 - 12:35 #2
jeg synes i øvrigt ellers dit eget forslag ser korrekt ud - uden at teste det.

hvis det viser sig den er korrekt så skal du nok lige sikre dig at alle Afkast_1aar værdierne rent faktisk er gyldige og kan konverteres.

Jeg kan ikke lige huske om det skulle være et problem nemlig.
Avatar billede s0mmer Nybegynder
11. februar 2010 - 12:42 #3
Jeg prøvede med:
SELECT    Afkast_1aar
FROM        Afdelinger
ORDER BY CONVERT(DECIMAL(13, 2), Afkast_1aar) DESC


Men samme fejl.. "error converting varchar to numeric.."

Men.. efter et gennemløb af værdierne ser jeg at der også er NULL's og eks. 34 (uden ,0) og -3,5 f.eks.

Er dette et problem? Og hvis ja, hvad har jeg af muligheder så?
Avatar billede kalp Novice
11. februar 2010 - 13:16 #4
SELECT    Afkast_1aar
FROM        Afdelinger
WHERE isNumeric( Afkast_1aar)<> 0
ORDER BY CONVERT(DECIMAL(13, 2), Afkast_1aar) DESC

måske? jeg burde selvfølgelig teste det selv, men har ikke lige en sql server i nærheden:)
men du skal nok blot undgå at convertere de kolonner der ikke kan.. måske skal der også tjekkes for null is isNumeric ikke er nok.
Avatar billede s0mmer Nybegynder
11. februar 2010 - 13:53 #5
Problemet er bare at jeg ikke kan udelukke de rækker hvor der eksempelvis optræder et NULL i netop dette felt. Rækken indeholder jo en masse andet brugbar information.
Avatar billede s0mmer Nybegynder
11. februar 2010 - 14:19 #6
Jeg fandt en løsning:

CAST(REPLACE(Afkast_1md,',','.') AS Float)
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
Kurser inden for grundlæggende programmering

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