113 votes

Comment convertir int en caractère avec des zéros non significatifs?

J'ai besoin de convertir int datafield en nvarchar avec des zéros non significatifs

Exemple:

1 convertir en '001'

867 convertir en '000867', etc.

THX.


Voici ma réponse 4 heures plus tard ...

J'ai testé ce script T-SQL et fonctionne très bien pour moi!

 DECLARE @number1 INT, @number2 INT

SET @number1 = 1

SET @number2 = 867

SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED

SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED
 

J'ai créé cette fonction utilisateur

Code T-SQL:

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

    -- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number

    -- @intlen contains the string size to return
    IF @intlen > 20
       SET @intlen = 20

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

END
 

Exemple :

SELECT dbo.CIntToChar (867, 6) AS COD_ID

SORTIE

000867

111voto

Nguyen Tran Points 1

Essayez ceci: select right('00000' + cast(Your_Field as varchar(5)), 5)

Le résultat sera composé de 5 chiffres, ex: 00001, ...., 01234

68voto

Darek.K Points 1

Vous pouvez également utiliser la fonction FORMAT () introduite dans SQL Server 2012 . http://technet.microsoft.com/library/hh213505.aspx

 DECLARE @number1 INT, @number2 INT

SET @number1 = 1
SET @number2 = 867

SELECT FORMAT(@number1, 'd10')
SELECT FORMAT(@number2, 'd10')
 

24voto

KM. Points 51800

Utilisez REPLICATE pour ne pas avoir à coder en dur tous les zéros non significatifs:

 DECLARE @InputStr int
       ,@Size     int
SELECT @InputStr=123
      ,@Size=10

PRINT REPLICATE('0',@Size-LEN(RTRIM(CONVERT(varchar(8000),@InputStr)))) + CONVERT(varchar(8000),@InputStr)
 

SORTIE:

 0000000123
 

15voto

GoldBishop Points 805

Pas de Haut-Jack à cette question, mais la remarque doit être faite que vous devez utiliser (N)VARCHAR au lieu de (N)CHAR type de données.

RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 )

Au-dessus de segment, ne produira pas la bonne réponse à partir de SQL 2005

RIGHT('000' + CAST(@number1 AS NVARCHAR(3)), 3 )

Au-dessus de segment, va produire la réponse souhaitée à partir de SQL 2005

Le varchar vous fournira le désiré de la longueur de préfixe à la volée. Où que la longueur fixe de type de données nécessitera la longueur de la désignation et de réglages.

5voto

C.List Points 163

Le type de données "int" ne peut pas comporter plus de 10 chiffres. De plus, la fonction "Len ()" fonctionne avec les ints. Il n'est donc pas nécessaire de convertir l'int en chaîne avant d'appeler la fonction len ().

Enfin, vous ne prenez pas en compte le cas où la taille de votre int> correspond au nombre total de chiffres pour lesquels vous souhaitez le compléter (@intLen).

Par conséquent, une solution plus concise / correcte est la suivante:

 CREATE FUNCTION rf_f_CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(10)
AS
BEGIN
    IF @intlen > 20 SET @intlen = 20
    IF @intlen < LEN(@intVal) RETURN RIGHT(CONVERT(nvarchar(10), @intVal), @intlen)
    RETURN REPLICATE('0', @intLen - LEN(@intVal)) + CONVERT(nvarchar(10), @intVal)
END
 

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