rellenar quitar izquierda espacios derecha con ceros agregar sql sql-server tsql string-formatting

quitar - Formateo de números rellenando con ceros a la izquierda en SQL Server



rellenar con ceros a la izquierda sql server 2012 (12)

Tenemos una vieja tabla SQL que fue utilizada por SQL Server 2000 por cerca de 10 años.

En él, nuestros números de identificación de empleado se almacenan como caracteres char(6) de 000001 a 999999 .

Estoy escribiendo una aplicación web ahora, y necesito almacenar los números de identificación de los empleados.

En mi nueva tabla, podría tomar el atajo y copiar la tabla anterior, pero espero una mejor transferencia de datos, un tamaño más pequeño, etc., simplemente almacenando los valores int del 1 al 999999 .

En C #, puedo formatear rápidamente un valor int para el número de placa usando

public static string GetBadgeString(int badgeNum) { return string.Format("{0:000000}", badgeNum); // alternate // return string.Format("{0:d6}", badgeNum); }

¿Cómo modificaría esta simple consulta SQL para formatear también el valor devuelto?

SELECT EmployeeID FROM dbo.RequestItems WHERE ID=0

Si EmployeeID es 7135, esta consulta debería devolver 007135 .


Cambia el número 6 a cualquiera que sea tu longitud total:

SELECT REPLICATE(''0'',6-LEN(EmployeeId)) + EmployeeId

Si la columna es INT, puede usar RTRIM para convertirla implícitamente a VARCHAR

SELECT REPLICATE(''0'',6-LEN(RTRIM(EmployeeId))) + RTRIM(EmployeeId)

Y el código para eliminar estos 0 y recuperar el número ''real'':

SELECT RIGHT(EmployeeId,(LEN(EmployeeId) - PATINDEX(''%[^0]%'',EmployeeId)) + 1)


Desde la versión 2012 y en adelante puede usar

SELECT FORMAT(EmployeeID,''000000'') FROM dbo.RequestItems WHERE ID=0


En mi versión de SQL no puedo usar REPLICATE. Así que hice esto:

SELECT CONCAT(REPEAT(''0'', 6-LENGTH(emplyeeID)), emplyeeID) AS emplyeeID FROM dbo.RequestItems`


Estoy publicando todo en un solo lugar, todo funciona para mí con 4 encabezado cero :)

declare @number int = 1; print right(''0000'' + cast(@number as varchar(4)) , 4) print right(''0000'' + convert(varchar(4), @number) , 4) print right(replicate(''0'',4) + convert(varchar(4), @number) , 4) print cast(replace(str(@number,4),'' '',''0'')as char(4)) print format(@number,''0000'')


La solución funciona para números con signo / negativo con ceros a la izquierda, para todas las versiones Sql:

DECLARE @n money = -3, @length tinyint = 15, @decimals tinyint = 0 SELECT REPLICATE(''-'', CHARINDEX(''-'', @n, 1)) + REPLACE(REPLACE(str(@n, @length, @decimals), ''-'', ''''), '' '', ''0'')


Odiaba tener que CONVERTIR el int, y esto parece mucho más simple. Incluso podría funcionar mejor ya que solo hay una conversión de cadena y una simple adición.

seleccione DERECHO (1000000 + Id del empleado, 6) ...

Solo asegúrese de que "1000000" tenga al menos tantos ceros como el tamaño necesario.


Otra forma, solo para completar.

DECLARE @empNumber INT = 7123 SELECT STUFF(''000000'', 6-LEN(@empNumber)+1, LEN(@empNumber), @empNumber)

O, según su consulta

SELECT STUFF(''000000'', 6-LEN(EmployeeID)+1, LEN(EmployeeID), EmployeeID) AS EmployeeCode FROM dbo.RequestItems WHERE ID=0


Puede cambiar su procedimiento de esta manera

SELECT Right(''000000'' + CONVERT(NVARCHAR, EmployeeID), 6) AS EmpIDText, EmployeeID FROM dbo.RequestItems WHERE ID=0

Sin embargo, esto supone que su EmployeeID es un valor numérico y este código cambia el resultado a una cadena. Sugiero que agregue nuevamente el valor numérico original.

EDITAR Por supuesto, no he leído atentamente la pregunta anterior. Dice que el campo es un char(6) por lo que EmployeeID no es un valor numérico. Si bien esta respuesta todavía tiene un valor per se, no es la respuesta correcta a la pregunta anterior.



Tan limpio como podría obtener y dar alcance de reemplazar con variables:

Select RIGHT(REPLICATE(''0'',6) + EmployeeID, 6) from dbo.RequestItems WHERE ID=0


SELECT cast(replace(str(EmployeeID,6),'' '',''0'')as char(6)) FROM dbo.RequestItems WHERE ID=0


SELECT replicate(''0'', 6 - len(employeeID)) + convert(varchar, employeeID) as employeeID FROM dbo.RequestItems WHERE ID=0