2009-11-19 196 views
18

¿Hay alguna manera en T-SQL para convertir un TINYINT a VARCHAR con formato de número personalizado? Por ejemplo, mi TINYINT tiene un valor de 3 y quiero convertirlo a un VARCH de 03, para que siempre muestre un número de 2 dígitos.Convertir número a varchar en SQL con formato

No veo esta capacidad en la función CONVERTIR.

Respuesta

29
RIGHT('00' + CONVERT(VARCHAR, MyNumber), 2) 

ser advertidos de que esto va a paralizar los números> 99. Es posible que desee tener en cuenta esa posibilidad.

1
declare @t tinyint 
set @t =3 
select right(replicate('0', 2) + cast(@t as varchar),2) 

Ditto: en el efecto cripping para los números de> 99

Si desea atender a 1-255 entonces se podría utilizar

select right(replicate('0', 2) + cast(@t as varchar),3) 

Pero esto le daría 001, 010, 100 etc.

4

Utilice la función DERECHA ... por ej.

DECLARE @testnum TINYINT 
SET @testnum = 3 
PRINT RIGHT('00' + CONVERT(VARCHAR(2), @testnum), 2) 
4

Puede probar este

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 
2

¿Cuál es el rango de valores? ¿Es de 0 a 10? Si es así, entonces prueba:

SELECT REPLICATE('0',2-LEN(@t)) + CAST(@t AS VARCHAR) 

que se encarga del 0 al 9, así como 10 a 99.

Ahora, tinyint puede ir hasta el valor de 255. Si desea controlar> 99 a 255 , a continuación, intente esta solución:

declare @t TINYINT 
set @t =233 
SELECT ISNULL(REPLICATE('0',2-LEN(@t)),'') + CAST(@t AS VARCHAR) 

para comprender la solución, la expresión a la izquierda del + calcula el número de ceros como prefijo a la cadena.

En el caso del valor 3, la longitud es 1. 2 - 1 es 1. REPLICAR Agrega un cero. En el caso del valor 10, la longitud es 2. 2 - 2 es 0. REPLICAR No agrega nada. En el caso del valor 100, la longitud es -1 que produce un NULL. Sin embargo, el valor nulo se maneja y se establece en una cadena vacía.

Ahora bien, si decide que debido a que tinyint puede contener hasta 255 y desea que su formateo sea de tres caracteres, simplemente cambie el valor de 2 LEN a 3 LEN en la expresión izquierda y listo.

0

Correción: 3-LEN

declare @t TINYINT 
set @t =233 
SELECT ISNULL(REPLICATE('0',3-LEN(@t)),'') + CAST(@t AS VARCHAR) 
+2

Bienvenido a Stack Overflow. Esta pregunta fue respondida originalmente hace casi 3 años. Cuando agrega una nueva respuesta a una pregunta tan antigua, es una buena idea explicar en detalle qué es novedoso acerca de su respuesta o por qué las respuestas originales no son precisas (o, quizás más probable, ya no son precisas). porque el producto ha cambiado). Además, no me queda claro qué está corrigiendo la 'Corrección'; deberías dejar eso en claro, también. –

1

Aquí está 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 a la izquierda que necesita. Siempre que, por supuesto, la longitud de su cadena sea siempre> = número máximo de dígitos que pueda contener su tipo de número.

0

Tenía el mismo problema con un campo de código postal. Algunas personas me enviaron un archivo de Excel con cremalleras, pero fueron formateadas como # 's.Tuvo que convertirlos en cadenas, así como anteponer 0 a la izquierda de 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) 

Usted acaba de modificar el @len para conseguir lo que desea. Como formato, obtendrá ...

001 
002 
... 
010 
011 
... 
255 

Lo ideal sería "varchar (@len)", también, pero que explota la compilación de SQL. Tienes que arrojar un # real en lugar de una var.

Cuestiones relacionadas