Rellene una cadena con ceros a la izquierda para que tenga 3 caracteres en SQL Server 2008

Resuelto Sunil asked hace 11 años • 19 respuestas

Tengo una cadena de hasta 3 caracteres cuando se creó por primera vez en SQL Server 2008 R2.

Me gustaría rellenarlo con ceros a la izquierda, de modo que si su valor original fuera '1', entonces el nuevo valor sería '001'. O si su valor original era '23' el nuevo valor es '023'. O si su valor original es '124', entonces el nuevo valor es el mismo que el valor original.

Estoy usando SQL Server 2008 R2. ¿Cómo haría esto usando T-SQL?

Sunil avatar May 26 '13 22:05 Sunil
Aceptado

Si el campo ya es una cadena, esto funcionará

 SELECT RIGHT('000'+ISNULL(field,''),3)

Si desea que los valores nulos se muestren como '000'

Podría ser un número entero, entonces querrías

 SELECT RIGHT('000'+CAST(field AS VARCHAR(3)),3)

Como lo requiere la pregunta, esta respuesta solo funciona si la longitud <= 3, si desea algo más grande, debe cambiar la constante de cadena y las dos constantes enteras al ancho necesario. p.ej'0000' and VARCHAR(4)),4

Hogan avatar May 26 '2013 15:05 Hogan

Aunque la pregunta era para SQL Server 2008 R2, por si alguien está leyendo esto con la versión 2012 y superiores, desde entonces se volvió mucho más fácil con el uso de FORMAT .

Puede pasar una cadena de formato numérico estándar o una cadena de formato numérico personalizado como argumento de formato (gracias a Vadim Ovchinnikov por esta sugerencia).

Para esta pregunta, por ejemplo, un código como

DECLARE @myInt INT = 1;
-- One way using a standard numeric format string
PRINT FORMAT(@myInt,'D3');
-- Other way using a custom numeric format string
PRINT FORMAT(@myInt,'00#');

salidas

001
001
Géza avatar May 04 '2016 12:05 Géza

El método seguro:

SELECT REPLACE(STR(n,3),' ','0')

Esto tiene la ventaja de devolver la cadena '***'para n < 0 o n > 999, lo cual es un buen y obvio indicador de entrada fuera de límites. Los otros métodos enumerados aquí fallarán silenciosamente al truncar la entrada a una subcadena de 3 caracteres.

Anon avatar Apr 17 '2015 21:04 Anon