213 votes

Le moyen le plus efficace de T-SQL pour remplir un varchar sur la gauche à une certaine longueur?

Par rapport à dire:

 REPLICATE(@padchar, @len - LEN(@str)) + @str
 

333voto

AlexCuse Points 9823

C'est simplement une utilisation inefficace de SQL, peu importe comment vous le faites.

peut-être quelque chose comme

 right('XXXXXXXXXXXX'+ rtrim(@str), @n)
 

où X est votre caractère de remplissage et @n est le nombre de caractères dans la chaîne résultante (en supposant que vous avez besoin du remplissage parce que vous avez une longueur fixe).

Mais comme je l'ai dit, vous devriez vraiment éviter de le faire dans votre base de données.

36voto

Kevin Points 2548

Plusieurs personnes ont donné des versions de ceci:

 right('XXXXXXXXXXXX'+ @str, @n)
 

soyez prudent avec cela car il va tronquer vos données réelles si elles sont plus longues que n.

16voto

Sklivvz Points 16412
@padstr = REPLICATE(@padchar, @len) -- this can be cached, done only once

SELECT RIGHT(@padstr + @str, @len)

9voto

TonyP Points 1592

Peut-être un plus de tuer j'ai ces UDF pour tamponner à gauche et à droite

 ALTER   Function [dbo].[fsPadLeft](@var varchar(200),@padChar char(1)='0',@len int)
returns varchar(300)
as
Begin

return replicate(@PadChar,@len-Len(@var))+@var

end
 

et à droite

 ALTER function [dbo].[fsPadRight](@var varchar(200),@padchar char(1)='0', @len int) returns varchar(201) as
Begin

--select @padChar=' ',@len=200,@var='hello'


return  @var+replicate(@PadChar,@len-Len(@var))
end
 

9voto

Tom H. Points 23783

Je ne suis pas sûr que la méthode que vous fournissez soit vraiment inefficace, mais d'une manière alternative, tant qu'elle ne doit pas être flexible dans la longueur ou le remplissage, serait (en supposant que vous voulez le remplir avec " 0 "à 10 caractères:

 DECLARE
   @pad_characters VARCHAR(10)

SET @pad_characters = '0000000000'

SELECT RIGHT(@pad_characters + @str, 10)
 

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