Digamos que tengo un int con el valor de 1. ¿Cómo puedo convertir ese int a una cadena de relleno cero, como 00000001
?¿Cómo convierto un int a una cadena acolchada cero en T-SQL?
Respuesta
Declare @MyInt integer Set @MyInt = 123
Declare @StrLen TinyInt Set @StrLen = 8
Select Replace(Str(@MyInt, @StrLen), ' ' , '0')
Otra forma es:
DECLARE @iVal int = 1
select REPLACE(STR(@iVal, 8, 0), ' ', '0')
O si realmente quiere ir núcleo duro ... ;-)
declare @int int
set @int = 1
declare @string varchar(max)
set @string = cast(@int as varchar(max))
declare @length int
set @length = len(@string)
declare @MAX int
set @MAX = 8
if @length < @MAX
begin
declare @zeros varchar(8)
set @zeros = ''
declare @counter int
set @counter = 0
while (@counter < (@MAX - @length))
begin
set @zeros = @zeros + '0'
set @counter = @counter + 1
end
set @string = @zeros + @string
end
print @string
Si estoy tratando de almohadilla a una longitud total específica, utilizo las funciones REPLICATE y DATALENGTH, así:
DECLARE @INT INT
DECLARE @UNPADDED VARCHAR(3)
DECLARE @PADDED VARCHAR(3)
SET @INT = 2
SET @UNPADDED = CONVERT(VARCHAR(3),@INT)
SET @PADDED = REPLICATE('0', 3 - DATALENGTH(@UNPADDED)) + @UNPADDED
SELECT @INT, @UNPADDED, @PADDED
Utilicé variables aquí para simplificar, pero verá, puede especificar la longitud final de la cadena total y no preocuparse por el tamaño de la INT con la que comienza, siempre que sea < = la longitud final de la cadena.
siempre uso:
SET @padded = RIGHT('z0000000000000'
+ convert(varchar(30), @myInt), 8)
El z deja de SQL desde coverting implícitamente la cadena en un int para la adición/concatenación.
Si el int puede ser negativo tiene un problema, de modo de evitar esto a veces hago esto:
DECLARE @iVal int
set @iVal = -1
select
case
when @ival >= 0 then right(replicate('0',8) + cast(@ival as nvarchar(8)),8)
else '-' + right(replicate('0',8) + cast(@ival*-1 as nvarchar(8)),8)
end
Gracias por atrapando esta caja de borde. –
Este trabajo para mí:
SELECT RIGHT('000' + CAST(Table.Field AS VARCHAR(3)),3) FROM Table
...
Creé esta función de usuario
Código de T-SQL:
CREATE FUNCTION CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(24) AS BEGIN
IF @intlen > 24
SET @intlen = 24
RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(24),@intVal))))
+ CONVERT(nvarchar(24),@intVal) END
Ejemplo:
SELECT dbo.CIntToChar (867, 6) AS COD_ID
SALIDA
partir de SQL Server 2012 ahora puede hacer esto:
format(@int, '0000#')
Te amo gordy :) – Charles380
awesome !! ¡Gracias! –
solución sucinta para sucky int :) – wwmbes
Y luego está esto o ne, utilizando REPLICATE:
SELECT REPLICATE('0', 7) + '1'
Por supuesto, puede reemplazar los literales 7 y '1' con funciones apropiadas según sea necesario; lo anterior le da su ejemplo. Por ejemplo:
SELECT REPLICATE('0', 8 - LEN(CONVERT(nvarchar, @myInt))) + CONVERT(nvarchar, @myInt)
rellenará un número entero de menos de 8 lugares con ceros de hasta 8 caracteres.
Ahora, un número negativo en el segundo argumento de REPLICATE devolverá NULL.Por lo tanto, si eso es una posibilidad (por ejemplo, @myInt podría ser más de 100 millones en el ejemplo anterior), entonces usted puede utilizar unen para devolver el número sin ceros a la izquierda si hay más de 8 caracteres:
SELECT COALESCE(REPLICATE('0', 8 - LEN(CONVERT(nvarchar, @myInt))) + CONVERT(nvarchar, @myInt), CONVERT(nvarchar, @myInt))
muy manera directa a pensar en el acolchado con 'de 0 es decir, si usted fija su @ _int de tener 4 decimales, se inyecta 4' de 0:
select RIGHT('0000'+ Convert(varchar, @_int), 4) as txtnum
; si su espacio fijo es 3, inyecte 3'0's
select RIGHT('000'+ Convert(varchar, @_int), 3) as txtnum
; a continuación me inyecto '00' 99 para generar etiquetas para cada edif
declare @_int int
set @_int = 1
while @_int < 100 Begin
select BldgName + '.Floor_' + RIGHT('00'+ Convert(varchar, @_int), 2)
+ '.balcony' from dbo.tbl_FloorInfo group by BldgName
set @_int = @_int +1
End
resultado es:
'BldgA.Floor_01.balcony'
'BldgB.Floor_01.balcony'
'BldgC.Floor_01.balcony'
..
..
'BldgA.Floor_10.balcony'
'BldgB.Floor_10.balcony'
'BldgC.Floor_10.balcony'
..
..
..
'BldgA.Floor_99.balcony'
'BldgB.Floor_99.balcony'
'BldgC.Floor_99.balcony'
- 1. ¿Cómo convierto una cadena a un tipo int en C#?
- 2. OCaml - ¿Cómo convierto int en una cadena?
- 3. ¿Cómo convierto int? en int
- 4. ¿Cómo convierto un decimal a un int en C#?
- 5. ¿Cómo convierto un InputStream a una cadena en Java?
- 6. Cómo convertir un int a una cadena?
- 7. cómo agrego un int a una cadena
- 8. ¿Cómo convierto StreamReader a una cadena?
- 9. ¿Cómo convierto un int a dos bytes en C#?
- 10. Convertir haskell Int con cero inicial a la cadena
- 11. ¿Cómo convierto una cadena JSON a una función en javascript?
- 12. Hace "int a = int();" necesariamente darme un cero?
- 13. ¿Cómo convierto un diccionario a una búsqueda?
- 14. ¿Cómo convierto una cadena de caracteres en una cadena wchar_t?
- 15. ¿Cómo convierto un largo en una cadena en C++?
- 16. En Erlang, ¿cómo convierto una Cadena en un valor binario?
- 17. ¿Cómo convierto una cadena en un char * en C++?
- 18. ¿Cómo convierto una cadena en un buffer en Python 3.1?
- 19. ¿Cómo añades un int a una cadena en C++?
- 20. ¿Cómo convierto una cadena a UTF-8 en Android?
- 21. ¿Cómo convierto un Enum a un Int para usar en una operación Expression.Equals?
- 22. Objective-C, ¿cómo convierto un doble en un int?
- 23. TSQL DateTime to DateKey Int
- 24. ¿Cómo convierto de int a Long en Java?
- 25. ¿Cómo convierto una cadena binaria en un número en Perl?
- 26. ¿Cómo convierto un entero en una cadena en Excel VBA?
- 27. ¿Cómo convierto un doble en una cadena en C++?
- 28. ¿Cómo convierto un UIColor en una cadena hexadecimal?
- 29. Cómo convierto un nombre de función en una cadena
- 30. ¿Cómo convierto un objeto org.w3c.dom.Document en una Cadena?
O sobre la marcha si se dan longitudes fijas: 'SELECT REPLACE (STR (DATEPART (MONTH, [Date]), 2), '', '0')' – dakab