2009-12-16 11 views
27

Ich kann keine einfache Möglichkeit finden, dies in T-SQL zu tun.T-SQL-Format Integer bis 2-stellige Zeichenfolge

ich zum Beispiel eine Säule (SortExport_CSV), die eine Ganzzahl zurückgibt ‚2‘ bis 90. Wenn die gespeicherte Nummer eine Ziffer ist, wie ich es brauchen, um eine 2-stellige Zeichenfolge zu konvertieren, die mit einer 0 beginnt Ich habe versucht, CAST zu verwenden, aber ich bleibe stecken auf, wie man den Stil im bevorzugten Format anzeigt (0 #)

Natürlich ist es einfach, dies am Frontend zu tun (SSRS, MSAccess, Excel, etc) aber In diesem Fall habe ich kein Frontend und muss den Rohdatensatz mit der bereits formatierten zweistelligen Zeichenfolge versehen.

+0

Siehe. Ich habe dir gesagt :) –

Antwort

50
select right ('00'+ltrim(str(<number>)),2) 
+1

Art von ordentlich, sechs verschiedene SQL-Variationen auf das gleiche Problem ... – Sparky

0

hier gehen Sie

select RIGHT(REPLICATE('0', 2) + CAST(2 AS VARCHAR(2)), 2) 

sollte 02

+0

Whils ist es schön, die REPLICATE-Funktion verwenden, ist es ein wenig über Bord, wenn eine einfache '00' tun wird – cjk

+1

Aber es ist viel schöner zu pflegen – Scoregraphic

+0

Sie müssen REPLICATE nicht verwenden. Die einzelne Zeichenkette '0' wird gut funktionieren. – Guffa

5

Konvertieren den Wert in einen String zurück, eine Null vor ihm hinzufügen (so, dass es zwei oder Baum Zeichen) und erhalten der letzte Zeichen:

right('0'+convert(varchar(2),Sort_Export_CSV),2) 
+0

Guffa ... Ich hatte vor einiger Zeit aufgegeben, aber das funktioniert perfekt. Vielen Dank für Ihre Antworten. Ich bin überwältigt :) –

0

versuchen

right('0' + convert(varchar(2), @number),2) 
16
SELECT RIGHT('0' + CAST(sortexport_csv AS VARCHAR), 2) 
FROM your_table 
+0

Luke, das war das, was ich gesucht habe. Einfache und konsistente Verwendung von CAST. Danke –

1

Ein weiteres Beispiel:

select 
case when teamId < 10 then '0' + cast(teamId as char(1)) 
else cast(teamId as char(2)) end  
as 'pretty id', 
* from team 
1

ist hier kleine Funktion, die Pad-Wert mit einem bestimmten padding char links Sie können festlegen, wie viele Zeichen nach links aufgefüllt zu werden ..

Create function fsPadLeft(@var varchar(200),@padChar char(1)='0',@len int) 
     returns varchar(300) 
    as 
    Begin 
     return replicate(@PadChar,@len-Len(@var))[email protected] 
    end 

zu nennen:

declare @value int; set @value =2 
select dbo.fsPadLeft(@value,'0',2) 
0

Versuchen Sie, diese

--generate Zahl von 2 bis 90

;with numcte as(
select 2 as rn 
union all 
select rn+1 from numcte where rn<90) 

--program, die die Zahlenformate je nach Länge

select case when LEN(rn) = 1 then '00'+CAST(rn as varchar(10)) else CAST(rn as varchar(10)) end number 
from numcte 

Teil Ausgang:

number  
002 
003 
004 
005 
006 
007 
008 
009 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
0
SELECT 
replace(str(month(DATEADD(month, -1, '2012-02-29')), 2),' ' , '0') 
7

Du alles zu viel Arbeit zu tun:

right(str([email protected]),2) 

-- for a function, same idea: 
-- 
create function zeroPad(@yourNum int, @wid int) 
as 
begin 
    return right([email protected]), @wid) 
end 
3
DECLARE @Number int = 1; 
SELECT RIGHT('0'+ CONVERT(VARCHAR, @Number), 2) 
--OR 
SELECT RIGHT(CONVERT(VARCHAR, 100 + @Number), 2) 
GO 
0

Sie eine Funktion wie folgt erstellen:

CREATE FUNCTION [dbo].[f_convert_int_to_2_digits](@input int) 
RETURNS varchar(10) 
AS 
BEGIN 
    --return value 
    DECLARE @return varchar(10) 

    if @input < 10 
    begin 
    set @return = '0' + convert(varchar(1), @valor) 
end 
    else 
    begin 
     set @return = convert(varchar(10), @input) 
    end 

    -- return result 
    RETURN @return 

END 

und es dann überall verwenden:
select [dbo].[f_convert_int_to_2_digits](<some int>)

+0

Danke, ich werde das versuchen :) –

0

Sie könnten versuchen, diesen

SELECT RIGHT('0' + convert(varchar(2) , '0'), 2) -- OUTPUTS : 00 
SELECT RIGHT('0' + convert(varchar(2) , '8'), 2) -- OUTPUTS : 08 
SELECT RIGHT('0' + convert(varchar(2) , '9'), 2) -- OUTPUTS : 09 
SELECT RIGHT('0' + convert(varchar(2) , '10'), 2) -- OUTPUTS : 10 
SELECT RIGHT('0' + convert(varchar(2) , '11'), 2) -- OUTPUTS : 11 

diese

13

Sie können in Format-Funktion T-SQL der Verwendung helfen soll gebaut:

declare @number int = 1 
select format (@number, '0#') 
+6

Das ist nur für SQL Server 2012+ – JumpingJezza

Verwandte Themen