En el trabajo diario con bases de datos, muchas veces necesitamos que ciertos números tengan siempre la misma longitud. Esto ocurre, por ejemplo, con códigos de productos, identificadores de cliente, números de factura o cualquier campo que deba mostrarse con un formato fijo.
En SQL Server existen varias formas de lograrlo, siendo una de las más comunes añadir ceros a la izquierda de un número hasta completar la longitud deseada. En este artículo te mostraré cómo hacerlo paso a paso, con ejemplos prácticos, buenas prácticas y alternativas que puedes aplicar según tu caso.
¿Por qué añadir ceros a la izquierda en SQL Server?
Aunque a primera vista pueda parecer un simple detalle estético, dar formato uniforme a los datos tiene varias ventajas:
- Consistencia visual: todos los códigos tienen la misma longitud, lo que facilita la lectura.
- Comparaciones correctas: cuando se comparan valores en informes o exportaciones, el formato uniforme evita confusiones.
- Compatibilidad: algunos sistemas externos requieren datos en formato fijo, especialmente en integraciones o intercambios de información.
Un caso típico es cuando trabajamos con códigos de 6 dígitos: el número 123 debe convertirse en 000123.
Método más usado: CAST/CONVERT + RIGHT
La forma más extendida de formatear números con ceros a la izquierda en SQL Server combina las funciones CAST (o CONVERT), RIGHT y REPLICATE.
- CAST/CONVERT: convierten un número a cadena (
VARCHAR). - REPLICATE: repite un carácter tantas veces como se indique (en este caso, el “0”).
- RIGHT: extrae un número fijo de caracteres por la derecha.
De esta manera, siempre obtenemos una cadena de longitud fija.
Ejemplo práctico en SQL Server
Imaginemos una tabla Productos con una columna Codigo. Queremos que todos los códigos tengan una longitud de 6 caracteres. Si un valor es 321, debería mostrarse como 000321.
SELECT
RIGHT(REPLICATE('0', 6) + CAST(Codigo AS VARCHAR(6)), 6) AS Codigo_Formateado
FROM Productos;
Explicación paso a paso:
CAST(Codigo AS VARCHAR(6))convierte el número en texto.REPLICATE('0', 6)genera una cadena de seis ceros (000000).- Concatenamos los ceros con el número convertido.
RIGHT(..., 6)toma siempre los últimos 6 caracteres, asegurando el formato deseado.
El resultado será uniforme: 000123, 001245, 123456, etc.
Variaciones y alternativas
Usar FORMAT (SQL Server 2012+)
Si utilizas SQL Server 2012 o posterior, puedes aprovechar la función FORMAT, mucho más legible:
SELECT FORMAT(Codigo, '000000') AS Codigo_Formateado
FROM Productos;
Aquí, el patrón '000000' indica que queremos siempre 6 dígitos.
Usar STR
Otra opción menos conocida es la función STR, aunque requiere más ajustes:
SELECT REPLACE(STR(Codigo, 6, 0), ' ', '0') AS Codigo_Formateado
FROM Productos;
El inconveniente es que STR rellena con espacios en lugar de ceros, por eso usamos REPLACE.
Errores comunes al añadir ceros a la izquierda
- No ajustar la longitud correctamente
Si en elRIGHTusas un número menor que el requerido, perderás información. ❌ Ejemplo:SELECT RIGHT('000000' + CAST(123456 AS VARCHAR(6)), 5);Resultado:23456(el 1 se pierde). - Olvidar convertir a VARCHAR
Concatenar directamente un número con una cadena genera errores de tipo. - Elegir una longitud insuficiente
Si tu código puede crecer más allá de la longitud definida, el formato se rompe. Siempre prevé el tamaño máximo real.
Buenas prácticas
- Define la longitud pensando en el caso de uso real (¿necesitas 6, 8, 10 dígitos?).
- Centraliza el formato en vistas o procedimientos almacenados, para no duplicar lógica.
- Documenta en tu esquema de base de datos por qué ese campo requiere ceros a la izquierda.
Conclusión
Añadir ceros a la izquierda en SQL Server es una tarea muy común y fácil de resolver.
- Si necesitas compatibilidad con versiones antiguas, combina
CAST/CONVERT,RIGHTyREPLICATE. - Si trabajas con SQL Server 2012 o superior, la opción más sencilla y limpia es
FORMAT.
Con estas técnicas, podrás mantener la uniformidad en tus datos, evitar errores en informes y mejorar la presentación de tus resultados.
💡 Si lo que necesitas es añadir ceros a la derecha en SQL Server, puedes ver este otro artículo donde explico cómo hacerlo paso a paso.
y si fuera a la derrecha?
Buenos días, Francisco!
He creado una entrada donde dejo el método para añadir los números o caracteres por la derecha. Espero que te sirva de ayuda ;). Un saludo
Me ayudo mucho este query, le hice una corrección con trim ya que en mi caso el campo código aunque es numérico lo guardan como varchar y por la longitud se pone espacios a la derecha.
SELECT right(‘000000’ + rtrim(ltrim(CAST(codigo AS VARCHAR(6)))), 6) AS Codigo_Formateado
FROM Productos
Me alegro mucho de que te ayudase la query, que ya cogiéndola como base te ha permitido adaptarla a tus necesidades concretas 😉