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.
14 réponses
SELECT RIGHT('0' + CAST(sortexport_csv AS VARCHAR), 2)
FROM your_table
Vous pouvez utiliser la fonction de format T-SQL:
declare @number int = 1
select format (@number, '0#')
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
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)
DECLARE @Number int = 1;
SELECT RIGHT('0'+ CONVERT(VARCHAR, @Number), 2)
--OR
SELECT RIGHT(CONVERT(VARCHAR, 100 + @Number), 2)
GO
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
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)
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
ici vous allez
select RIGHT(REPLICATE('0', 2) + CAST(2 AS VARCHAR(2)), 2)
devrait revenir 02
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
SELECT
replace(str(month(DATEADD(month, -1, '2012-02-29')), 2),' ' , '0')
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>)