Je ne trouve pas de moyen simple de faire cela dans T-SQL.
J'ai par exemple une colonne (SortExport_CSV) qui renvoie un entier compris entre '2' et 90 . Si le nombre enregistré est un chiffre unique, il me faut le convertir en chaîne de 2 chiffres commençant par 0 . J'ai essayé d'utiliser CAST mais je ne sais plus comment afficher le style dans le format préféré (0 #)
Bien sûr, il est facile de faire cela en amont (SSRS, MSAccess, Excel, etc.), mais dans ce cas, je n’ai pas d’intérieur et je dois fournir au groupe de données brutes la chaîne à 2 chiffres déjà formatée.
select right ('00'+ltrim(str( <number> )),2 )
SELECT RIGHT('0' + CAST(sortexport_csv AS VARCHAR), 2)
FROM your_table
Vous pouvez utiliser la fonction de format intégrée de T-SQL:
declare @number int = 1
select format (@number, '0#')
Vous faites 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 celle-ci (pour qu'il s'agisse de deux caractères arborescents) et obtenez le dernier en 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
Tu pourrais essayer ça
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
Un 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
Voici une petite fonction qui laisse la valeur de pad avec un caractère de remplissage donnéVous pouvez spécifier le nombre de caractères à compléter.
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
Appeler :
declare @value int; set @value =2
select dbo.fsPadLeft(@value,'0',2)
voici
select RIGHT(REPLICATE('0', 2) + CAST(2 AS VARCHAR(2)), 2)
devrait retourner 02
essayer
right('0' + convert(varchar(2), @number),2)
SELECT
replace(str(month(DATEADD(month, -1, '2012-02-29')), 2),' ' , '0')
Essaye ça
--Générer le nombre de 2 à 90
;with numcte as(
select 2 as rn
union all
select rn+1 from numcte where rn<90)
--Programme formatant le nombre en fonction de 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