Format T-SQL entier à chaîne à 2 chiffres

je ne peux pas trouver un moyen simple de le faire en T-SQL.

j'ai par exemple une colonne (SortExport_CSV) qui renvoie un entier '2' à 90. Si le nombre stocké est un chiffre simple, je dois le convertir à une chaîne de 2 chiffres qui commence par un 0. J'ai essayé d'utiliser la FONTE, mais je me retrouve bloqué sur l'affichage du style dans le format préféré (0#)

bien sûr, il est facile de le faire sur l'extrémité avant (SSRS, MSAccess, Excel, etc) mais dans ce cas je n'ai pas de avant et doit fournir l'ensemble de données brutes avec la chaîne déjà formatée de 2 chiffres.

30
demandé sur Joel Coehoorn 2009-12-16 16:34:39

14 réponses

select right ('00'+ltrim(str( <number> )),2 )
52
répondu Sparky 2009-12-16 13:37:44
SELECT RIGHT('0' + CAST(sortexport_csv AS VARCHAR), 2)
FROM your_table
18
répondu LukeH 2009-12-16 13:42:01

Vous pouvez utiliser la fonction de format T-SQL:

declare @number int  = 1
select format (@number, '0#')
13
répondu Alex 2014-11-28 18:24:04

Vous êtes tous trop de travail:

right(str(100+@x),2)

-- for a function, same idea: 
--
create function zeroPad( @yourNum int, @wid int)
as 
begin
  return right( 1000000+@yourNum), @wid)
end
7
répondu Tom Considine 2012-06-07 11:00:49

convertissez la valeur en chaîne, ajoutez un zéro devant (de sorte que ce soit deux ou des caractères d'arbre), et obtenez le dernier des caractères:

right('0'+convert(varchar(2),Sort_Export_CSV),2)
5
répondu Guffa 2009-12-16 13:40:14
DECLARE @Number int = 1;
SELECT RIGHT('0'+ CONVERT(VARCHAR, @Number), 2)
--OR
SELECT RIGHT(CONVERT(VARCHAR, 100 + @Number), 2)
GO
3
répondu Aleksei 2012-11-15 09:44:38

Autre exemple:

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
répondu Paul Sasik 2009-12-16 13:43:39

Ici est minuscule fonction gauche pad valeur avec un rembourrage char Vous pouvez spécifier le nombre de caractères à être rembourré à gauche..

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

l'appel De :

declare @value int; set @value =2
select dbo.fsPadLeft(@value,'0',2)
1
répondu TonyP 2009-12-16 14:06:23

Vous pouvez essayer ce

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

cela devrait aider

1
répondu Yasser 2013-07-24 09:36:12

ici vous allez

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

devrait revenir 02

0
répondu Pratap .R 2009-12-16 13:38:34

right('0' + convert(varchar(2), @number),2)
0
répondu Santiago Cepas 2009-12-16 13:40:48

Essayez ceci

--Générer nombre de 2 à 90

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

--programme qui formate le nombre basé sur la longueur

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

Sortie Partielle:

number    
002
003
004
005
006
007
008
009
10
11
12
13
14
15
16
17
18
19
20
0
répondu priyanka.sarkar 2009-12-17 02:45:04
SELECT
replace(str(month(DATEADD(month, -1, '2012-02-29')), 2),' ' , '0')
0
répondu keisy 2012-10-28 16:31:31

Vous pouvez créer une fonction comme ceci:

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

et ensuite l'utiliser partout:

select [dbo].[f_convert_int_to_2_digits](<some int>)

0
répondu Iván Sainz 2013-07-04 14:59:43