Rellene una cadena con ceros a la izquierda para que tenga 3 caracteres en SQL Server 2008
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?
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
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
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.