yyyy valor texto numero formato float fecha decimales convertir convert sql tsql

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.