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
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