Si usa Oracle Database o MySQL, tiene la suerte de tener el LPAD()
y RPAD()
funciones, que le permiten rellenar una cadena con un carácter (o caracteres) dado a su izquierda y/o derecha.
Sin embargo, SQL Server (o más precisamente, T-SQL) no incluye estas funciones. Entonces, si necesita algo de relleno izquierdo, tendrá que improvisar.
Este artículo presenta cuatro opciones para rellenar un número con ceros a la izquierda en SQL Server. Entonces puedes hacer cosas como convertir 7
en 007
. Tres de estas opciones funcionan en cadenas, por lo que también puede aplicar relleno a los datos textuales.
Método 1:utilice la función FORMAT()
Si necesita aplicar ceros iniciales a un número, entonces esta opción debería ser todo lo que necesita. Esta opción usa el FORMAT()
función. Esta función devuelve el número como una cadena en nuestro formato especificado:
SELECT FORMAT(7, '000');
Resultado:
007
En este caso, usamos el 0
especificador de formato para formatear el número con ceros a la izquierda cuando corresponda. Este es solo uno de los muchos especificadores de formato personalizados. Los especificadores de formato personalizados nos permiten ser muy precisos sobre cómo se formatea nuestro número.
Tenga en cuenta que el FORMAT()
La función es solo para números y valores de fecha y hora. Entonces, si necesita aplicar relleno a una cadena real, siga leyendo.
Método 2:utilice la función DERECHA()
El segundo método usa RIGHT()
función para devolver solo la parte más a la derecha de la cadena, después de agregar algunos ceros a la izquierda.
Aunque estoy aplicando ceros iniciales a un "número" aquí, en realidad es una representación de cadena de un número. Entonces, si necesita aplicar relleno a una cadena en lugar de a un número, entonces este método debería funcionar.
SELECT RIGHT('000' + '1234', 7);
Resultado:
0001234
El 7
especifica cuántos caracteres debe tener el resultado final (después de agregar los ceros).
Reducción de la longitud
Entonces, si reducimos ese número, reducirá el número de ceros a la izquierda:
SELECT RIGHT('000' + '1234', 6);
Resultado:
001234
Aumento de la longitud
Pero si aumentamos el número, debemos asegurarnos de haber especificado suficientes ceros para alcanzar la longitud requerida:
SELECT RIGHT('000000' + '1234', 10);
Resultado:
0000001234
De lo contrario, terminaremos con esto:
SELECT RIGHT('000' + '1234', 10);
Resultado:
0001234
Recortar el número
También tenga en cuenta que si no especifica suficientes caracteres para la longitud de cadena resultante, el número se cortará y solo obtendrá la parte más a la derecha del número:
SELECT RIGHT('000' + '1234', 2);
Resultado:
34
Entonces, en este caso, el número inicial se truncó y se ignoraron los ceros iniciales.
Este es un escenario en el que el resultado difiere del de MySQL y LPAD()
de Oracle. función. Esa función habría producido los primeros 2 dígitos (sin relleno) en lugar de los últimos 2 dígitos. Así:
SELECT LPAD(1234, 2, 0);
Resultado:
12
Si necesita una solución de SQL Server que se comporte como LPAD()
en tales casos, intente esto:
SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);
Resultado:
12
Aunque, ten en cuenta que obtienes el mismo resultado simplemente usando LEFT()
función por sí mismo:
SELECT LEFT('1234', 2);
Resultado:
12
Además, me cuesta pensar en una razón por la que alguien quiera acortar el número (considerando que están tratando de rellenarlo), pero al menos esto es algo a considerar.
Método 3:use una combinación de RIGHT() y REPLICATE()
Este método es casi el mismo que el método anterior, con la única diferencia de que simplemente reemplazo los tres ceros con REPLICATE()
función:
SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);
Resultado:
0001234
El REPLICATE()
le evita tener que escribir cada cero (u otro carácter) varias veces.
Método adicional:método 4:utilice una combinación de REPLACE() y STR()
Este método proviene de un ángulo completamente diferente a los métodos anteriores:
SELECT REPLACE(STR('1234', 6),' ','0');
Resultado:
001234
Aquí usamos REPLACE()
función junto con STR()
función para convertir un número en una cadena de una longitud específica, luego convertir cualquier carácter de espacio en cero.
Una cosa con la que debe tener cuidado es que, si acorta el número (como hicimos en un ejemplo anterior), terminará con un montón de asteriscos en lugar del número (abreviado):
SELECT REPLACE(STR('1234', 2),' ','0');
Resultado:
**