Tengo la siguiente tabla A:
id
----
1
2
12
123
1234
Necesito rellenar los id
valores con ceros a la izquierda :
id
----
0001
0002
0012
0123
1234
¿Cómo puedo conseguir esto?
Creo que esto puede ser lo que estás buscando:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
o
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
No he probado la sintaxis en el segundo ejemplo. No estoy seguro de si eso funciona al 100%, puede requerir algunos ajustes, pero transmite la idea general de cómo obtener el resultado deseado.
EDITAR
Para abordar las preocupaciones enumeradas en los comentarios ...
@ pkr298 - Sí, STR solo funciona con números ... El campo del OP es una ID ... por lo tanto, solo un número.
@Desolator - Por supuesto que no funcionará ... el primer parámetro tiene 6 caracteres. Puedes hacer algo como:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
esto teóricamente debería mover los postes de la portería ... a medida que el número aumenta, SIEMPRE debería funcionar ... sin importar si es 1 o 123456789 ...
Entonces, si su valor máximo es 123456 ... verá 0000123456 y si su valor mínimo es 1, verá 0000000001
STR(123456, 4)
, volverá****
SQL Server ahora admite la función FORMAT a partir de la versión 2012, por lo que:
hará el truco.
Si su identificación o columna está en un
varchar
y representa un número que convierte primero:fuente
Resultado
fuente
Publicación anterior, pero tal vez esto ayude a alguien:
Para completar hasta terminar con 4 caracteres que no estén en blanco:
Para completar hasta las 10:
En caso de que la columna sea numérica , conviértala a varchar primero con dicho código:
Y para completar hasta el 10 con un campo numérico:
fuente
Prueba esto:
fuente
- Por favor, mire estos.
- espero que estos te ayuden
fuente
Esto funciona para cadenas, enteros y numéricos:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
Donde
4
es la longitud deseada. Funciona para números con más de 4 dígitos, devuelve una cadena vacía en elNULL
valor.fuente
Si alguien todavía está interesado, encontré este artículo en DATABASE.GUIDE:
Left Padding in SQL Server - 3 LPAD () Equivalents
En resumen, hay 3 métodos mencionados en ese artículo.
Digamos que su id = 12 y necesita que se muestre como 0012.
Método 1: use la función RIGHT ()
El primer método usa la función RIGHT () para devolver solo la parte más a la derecha de la cadena, después de agregar algunos ceros a la izquierda.
SELECT RIGHT('00' + '12', 4);
Resultado:
0012
Método 2: 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 la función REPLICATE ():
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
Resultado:
0012
Método 3: use una combinación de REPLACE () y STR ()
Este método proviene de un ángulo completamente diferente a los métodos anteriores:
SELECT REPLACE(STR('12', 4),' ','0');
Resultado:
0012
Consulte el artículo, hay un análisis más profundo con ejemplos.
fuente
Esto es lo que normalmente uso cuando necesito rellenar un valor.
fuente
Necesitaba esto en una función en el servidor SQL y ajusté un poco la respuesta de Patrick.
fuente
Crear función:
Ejemplo:
fuente
SELECT @var = LTRIM(RTRIM(@Text))
Creé una función:
Uso: seleccione dbo.fnPadLeft (123, 10)
Devoluciones: 0000000123
fuente
Algo bastante compatible con ODBC, si es necesario, podría ser lo siguiente:
Esto se basa en el hecho de que la cantidad de dígitos para un número de base 10 se puede encontrar por el componente integral de su registro. De esto podemos restarlo del ancho de relleno deseado. La repetición devolverá los
null
valores por debajo de 1, por lo que necesitamosifnull
.fuente
Mi solución no es eficiente, pero me ayudó en una situación en la que los valores (números de cheque bancario y número de referencia de transferencia bancaria) se almacenaron como varchar, donde algunas entradas tenían valores alfanuméricos y tuve que rellenar si la longitud es menor a 6 caracteres.
Pensado para compartir si alguien se encuentra en la misma situación.
fuente
Un ejemplo simple sería
fuente
Creé una función para hacer esto, donde puede especificar la longitud de caracteres de salida deseada:
Resultados de ejemplo
fuente
La forma más eficiente es:
fuente