valor - formato de fecha sql server dd/mm/yyyy
Convertir el nĂºmero a varchar en SQL con formato (8)
¿Hay alguna forma en T-SQL para convertir un TINYINT a VARCHAR con un formato de número personalizado? Por ejemplo, mi TINYINT tiene un valor de 3 y quiero convertirlo en una VARCH de 03, para que siempre muestre un número de 2 dígitos.
No veo esta habilidad en la función CONVERTIR.
¿Cuál es el rango de valores? ¿Es 0 a 10? Si es así, intente:
SELECT REPLICATE(''0'',2-LEN(@t)) + CAST(@t AS VARCHAR)
Que maneja de 0 a 9, así como de 10 a 99.
Ahora, tinyint puede subir al valor de 255. Si desea manejar> 99 a 255, pruebe esta solución:
declare @t TINYINT
set @t =233
SELECT ISNULL(REPLICATE(''0'',2-LEN(@t)),'''') + CAST(@t AS VARCHAR)
Para entender la solución, la expresión a la izquierda de la + calcula el número de ceros para prefijar a la cadena.
En el caso del valor 3, la longitud es 1. 2 - 1 es 1. REPLICATE Agrega un cero. En el caso del valor 10, la longitud es 2. 2 - 2 es 0. REPLICATE No agrega nada. En el caso del valor 100, la longitud es -1, lo que produce un valor NULL. Sin embargo, el valor nulo se maneja y se establece en una cadena vacía.
Ahora, si decide que debido a que tinyint puede contener hasta 255 y desea que su formato tenga tres caracteres, simplemente cambie 2-LEN a 3-LEN en la expresión de la izquierda y estará listo.
Aquí hay una alternativa después de la última respuesta.
declare @t tinyint,@v tinyint
set @t=23
set @v=232
Select replace(str(@t,4),'' '',''0''),replace(str(@t,5),'' '',''0'')
Esto funcionará en cualquier número y variando la longitud de la función str()
puede estipular cuántos ceros iniciales necesita. Siempre que la longitud de la cadena siempre sea> = número máximo de dígitos que puede contener su tipo de número.
Correción: 3-LEN
declare @t TINYINT
set @t =233
SELECT ISNULL(REPLICATE(''0'',3-LEN(@t)),'''') + CAST(@t AS VARCHAR)
Puedes probar esto
DECLARE @Table TABLE(
Val INT
)
INSERT INTO @Table SELECT 3
INSERT INTO @Table SELECT 30
DECLARE @NumberPrefix INT
SET @NumberPrefix = 2
SELECT REPLICATE(''0'', @NumberPrefix - LEN(Val)) + CAST(Val AS VARCHAR(10))
FROM @Table
Tenía el mismo problema con un campo de código postal. Algunas personas me enviaron un archivo de Excel con cremalleras, pero fueron formateados como # ''s. Tuvo que convertirlos en cadenas, así como anteponer los primeros 0 a ellos si fueran <5 len ...
declare @int tinyint
set @int = 25
declare @len tinyint
set @len = 3
select right(replicate(''0'', @len) + cast(@int as varchar(255)), @len)
Solo alteras el @len para obtener lo que quieres. Como formateado, obtendrás ...
001
002
...
010
011
...
255
Lo ideal sería que "varchar (@len)", también, pero que explote la compilación de SQL. Tienes que lanzar un # real en él en lugar de una var.
Use la función DERECHA ... por ejemplo
DECLARE @testnum TINYINT
SET @testnum = 3
PRINT RIGHT(''00'' + CONVERT(VARCHAR(2), @testnum), 2)
RIGHT(''00'' + CONVERT(VARCHAR, MyNumber), 2)
Tenga en cuenta que esto paralizará los números> 99. Es posible que desee tener en cuenta esa posibilidad.
declare @t tinyint
set @t =3
select right(replicate(''0'', 2) + cast(@t as varchar),2)
Ídem: sobre el efecto cripping para números> 99
Si desea atender a 1-255, entonces puede usar
select right(replicate(''0'', 2) + cast(@t as varchar),3)
Pero esto te daría 001, 010, 100 etc.