52 votes

Comment puis-je convertir un int en une chaîne remplie de zéro dans T-SQL?

Disons que j'ai un int avec la valeur 1. Comment puis-je convertir cet int en une chaîne à zéro, comme 00000001 ?

45voto

Charles Bretana Points 59899
Declare @MyInt integer Set @MyInt = 123
Declare @StrLen TinyInt Set @StrLen = 8

Select Replace(Str(@MyInt, @StrLen), ' ' , '0')

36voto

gordy Points 2653

à partir de SQL Server 2012, vous pouvez maintenant faire ceci:

 format(@int, '0000#')
 

35voto

Mitch Wheat Points 169614

Une autre façon est:

 DECLARE @iVal int = 1
select REPLACE(STR(@iVal, 8, 0), ' ', '0')
 

9voto

RicardoBalda Points 510

Ce travail pour moi:

 SELECT RIGHT('000' + CAST(Table.Field AS VARCHAR(3)),3) FROM Table
 

...

J'ai créé cette fonction utilisateur

Code T-SQL:

 CREATE FUNCTION CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(24) AS BEGIN

IF @intlen > 24
   SET @intlen = 24

RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(24),@intVal)))) 
    + CONVERT(nvarchar(24),@intVal) END
 

Exemple :

SELECT dbo.CIntToChar (867, 6) AS COD_ID

PRODUCTION

000867

1voto

Steve Brouillard Points 1639

Si j'essaye de remplir une longueur totale spécifique, j'utilise les fonctions REPLICATE et DATALENGTH, comme ceci:

 DECLARE @INT INT
DECLARE @UNPADDED VARCHAR(3)
DECLARE @PADDED VARCHAR(3)

SET @INT = 2
SET @UNPADDED = CONVERT(VARCHAR(3),@INT)
SET @PADDED = REPLICATE('0', 3 - DATALENGTH(@UNPADDED)) + @UNPADDED
SELECT @INT, @UNPADDED, @PADDED
 

J'ai utilisé des variables ici pour plus de simplicité, mais vous voyez, vous pouvez spécifier la longueur finale de la chaîne totale et ne vous inquiétez pas de la taille de l'INT avec laquelle vous commencez tant que c'est <= la longueur finale de la chaîne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X