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?
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
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
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.
"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
Synes godt om
Ny brugerNybegynder
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.