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
LLa forma más extendida de añadir ceros a la izquierda en SQL Server combina las funciones:
- CAST / CONVERT: convierten el número a texto.
- REPLICATE: genera una cadena de ceros.
- RIGHT: obtiene una longitud fija por la derecha.
Gracias a esta combinación, el resultado siempre tendrá el número de caracteres deseado.
Ejemplo práctico en SQL Server
Supongamos una tabla llamada Productos con una columna Codigo. Queremos que todos los códigos tengan una longitud de 6 caracteres, rellenando con ceros a la izquierda cuando sea necesario.
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 la cadena
000000. - Se concatenan los ceros con el número convertido.
- RIGHT(…, 6) asegura que siempre se obtengan los últimos 6 caracteres.
El resultado será uniforme: 000123, 001245, 123456, etc.
Variaciones y alternativas
Usar FORMAT (SQL Server 2012 o superior)
Si trabajas con SQL Server 2012 o versiones posteriores, puedes usar la función FORMAT, que resulta más legible:
SELECT FORMAT(Codigo, '000000') AS Codigo_Formateado
FROM Productos;
El patrón ‘000000’ indica que el número debe mostrarse siempre con seis dígitos.
Hay que tener en cuenta que FORMAT es más cómodo de leer, pero puede ser menos eficiente en consultas con grandes volúmenes de datos.
Usar STR
Otra alternativa es la función STR, aunque requiere un ajuste adicional:
SELECT REPLACE(STR(Codigo, 6, 0), ' ', '0') AS Codigo_Formateado
FROM Productos;
STR rellena con espacios en lugar de ceros, por lo que es necesario usar REPLACE para sustituirlos.
Errores comunes al añadir ceros a la izquierda
- No ajustar la longitud correctamente
Si en el RIGHT usas 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 texto
Concatenar directamente un número con cadenas genera errores de tipo. - Elegir una longitud insuficiente
Si el código puede crecer en el futuro, el formato dejará de ser válido.
Buenas prácticas
- Define la longitud teniendo en cuenta el tamaño máximo real del dato.
- Aplica el formato en vistas o procedimientos almacenados, no directamente en la tabla.
- Documenta por qué ese campo necesita ceros a la izquierda.
- Evita usar
FORMATen consultas críticas de rendimiento.
Preguntas frecuentes sobre ceros a la izquierda en SQL Server
¿Añadir ceros a la izquierda cambia el valor del número?
No. El valor sigue siendo numérico internamente. Los ceros se aplican únicamente al convertir el dato a texto para mostrarlo.
¿Qué método es mejor: FORMAT o RIGHT + REPLICATE?
Para consultas pequeñas, FORMAT es más legible. Para grandes volúmenes de datos, RIGHT + REPLICATE suele ofrecer mejor rendimiento.
¿Se pueden añadir ceros a la izquierda en una columna numérica?
No directamente. Los ceros a la izquierda solo tienen sentido cuando el dato se muestra como texto (VARCHAR o CHAR).
Conclusión
Añadir ceros a la izquierda en SQL Server es una tarea muy habitual y sencilla de resolver.
- Para máxima compatibilidad y rendimiento, utiliza CAST/CONVERT + RIGHT + REPLICATE.
- Si buscas simplicidad y usas SQL Server 2012 o superior, FORMAT puede ser suficiente.
Aplicando estas técnicas mejorarás la uniformidad de tus datos, evitarás errores en informes y facilitarás la integración con otros sistemas.
Si necesitas añadir ceros a la derecha en SQL Server, puedes consultar este otro artículo donde lo explico paso a paso.
Si necesitas ayuda con bases de datos, optimización de consultas o desarrollo de soluciones en SQL Server, puedes contactar conmigo y te asesoraré sin compromiso.
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 😉