Avatar billede scorp-d Nybegynder
20. februar 2009 - 14:36 Der er 5 kommentarer

konverter int til formatted string

Hej.

Jeg har en tabel (Tabel1) med 2 felter "Tal" og "Bogstav", det jeg gerne vil have ud af det er én streng der indeholder "Tal" formatterede, sammenlagt med "Bogstav".

Fx skal "Tal" = 1, og "Bogstav" = D give følgende: "001D"

"Tal" skal altid have 3 cifre, så 1 = 001, 10 = 010, 100 = 100.

Kan sagtens gøre det i koden men ville gerne vide hvordan det kan laves i et SQL-kald?

På forhånd tak.
Scorp-D
Avatar billede kelo Nybegynder
20. februar 2009 - 16:14 #1
Jeg vil mene at du kan lave noget ala dette.
Det er lavet i notepad uden adgang til en SQL :)

select
    CASE length(tal)
        WHEN 1 THEN '00' + CAST(tal as nvarchar(1)) + bogstav
        WHEN 2 THEN '0' + CAST(tal as nvarchar(2)) + bogstav
        WHEN 3 THEN tal + bogstav
    END
Avatar billede scorp-d Nybegynder
20. februar 2009 - 16:47 #2
Følgende ser ud til delvis at virke :)
Den kommer med fejlen at den ikke kan konvertere '001D' til en int.

SELECT    CASE LEN(Tal)
WHEN 1 THEN '00' + CAST(Tal AS nvarchar(1)) + Bogstav
WHEN 2 THEN '0' + CAST(Tal AS nvarchar(2)) + Bogstav
WHEN 3 THEN Tal + Bogstav
END AS Expr1
FROM  Table1
Avatar billede HenrikSjang Nybegynder
20. februar 2009 - 17:55 #3
Det er nok din case 3 der fejler, hvor du bare skriver Tal + Bogstav. Der vil den prøve at caste dit bogstav til et tal for at addere dem. Du bliver nødt til også her at caste dit tal til en varchar lige som i de to linjer ovenfor.
Avatar billede arne_v Ekspert
22. februar 2009 - 02:52 #4
Hvis du var på 2005 var det fristende at lave en lille CLR UDF som kan formatere tal.
Avatar billede bananskib Nybegynder
22. februar 2009 - 18:03 #5
"select case"-løsningen virker helt sikkert! Dette er en anden måde at løse problemet på, ved hjælpe af funktionen Replicate:

declare @tal varchar(3)
declare @bogstav char
set @bogstav = 'D'

set @tal = Cast(1 as varchar(3))
select replicate('0', 3-len(@tal)) + @tal + @bogstav

set @tal = Cast(22 as varchar(3))
select replicate('0', 3-len(@tal)) + @tal + @bogstav

set @tal = Cast(333 as varchar(3))
select replicate('0', 3-len(@tal)) + @tal  + @bogstav

/* fail: */
set @tal = Cast(5555 as varchar(3))
select replicate('0', 3-len(@tal)) + @tal  + @bogstav
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

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