2009-12-16 17 views
27

No puedo encontrar una forma sencilla de hacerlo en T-SQL.T-SQL Formato entero a cadena de 2 dígitos

tengo por ejemplo una columna (SortExport_CSV) que devuelve un número entero '2' a través de 90. Si el número almacenado es un solo dígito, lo necesito para convertir a una cadena de 2 dígitos que comienza con un 0. He tratado de usar CAST pero me quedo atascado en cómo mostrar el estilo en el formato preferido (0 #)

Por supuesto que es fácil de hacer esto en el front end (SSRS, MSAccess, Excel, etc.) pero en este caso, no tengo front-end y debo suministrar el conjunto de datos sin formato con la cadena de 2 dígitos ya formateada.

+0

Ver. Te lo dije :) –

Respuesta

50
select right ('00'+ltrim(str(<number>)),2) 
+1

Tipo de ordenadas, seis diferentes variaciones de SQL sobre el mismo problema ... – Sparky

0

Aquí tiene

select RIGHT(REPLICATE('0', 2) + CAST(2 AS VARCHAR(2)), 2) 

debe devolver 02

+0

Whils es bueno usar la función REPLICAR, está un poco por la borda cuando un simple '00' hará – cjk

+1

Pero es mucho más agradable mantener – Scoregraphic

+0

No tiene que usar REPLICATE en absoluto. La cadena de caracteres simples '0' funcionará bien. – Guffa

5

convertir el valor en una cadena, añadir un cero en frente de ella (por lo que se trata de dos o árboles caracteres), y obtener el último en caracteres:

right('0'+convert(varchar(2),Sort_Export_CSV),2) 
+0

Guffa ... Había abandonado convertir hace algún tiempo, pero funciona perfectamente. Gracias a todos por sus respuestas. Estoy abrumado :) –

0

tratar

right('0' + convert(varchar(2), @number),2) 
16
SELECT RIGHT('0' + CAST(sortexport_csv AS VARCHAR), 2) 
FROM your_table 
+0

Luke, este era el que estaba buscando. Uso simple y consistente de CAST. Gracias –

1

Otro ejemplo:

select 
case when teamId < 10 then '0' + cast(teamId as char(1)) 
else cast(teamId as char(2)) end  
as 'pretty id', 
* from team 
1

Aquí es pequeña función que dejó valor almohadilla con un char de relleno dada Puede especificar el número de caracteres que se rellena a la izquierda ..

Create function fsPadLeft(@var varchar(200),@padChar char(1)='0',@len int) 
     returns varchar(300) 
    as 
    Begin 
     return replicate(@PadChar,@len-Len(@var))[email protected] 
    end 

Para llamar:

declare @value int; set @value =2 
select dbo.fsPadLeft(@value,'0',2) 
0

Prueba este

número --generate a partir 2 a 90

;with numcte as(
select 2 as rn 
union all 
select rn+1 from numcte where rn<90) 

--program que formatea el número dependiendo de la duración

select case when LEN(rn) = 1 then '00'+CAST(rn as varchar(10)) else CAST(rn as varchar(10)) end number 
from numcte 

salida parcial:

number  
002 
003 
004 
005 
006 
007 
008 
009 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
0
SELECT 
replace(str(month(DATEADD(month, -1, '2012-02-29')), 2),' ' , '0') 
7

Eres todo hacer demasiado trabajo:

right(str([email protected]),2) 

-- for a function, same idea: 
-- 
create function zeroPad(@yourNum int, @wid int) 
as 
begin 
    return right([email protected]), @wid) 
end 
3
DECLARE @Number int = 1; 
SELECT RIGHT('0'+ CONVERT(VARCHAR, @Number), 2) 
--OR 
SELECT RIGHT(CONVERT(VARCHAR, 100 + @Number), 2) 
GO 
0

Puede crear una función como esta:

CREATE FUNCTION [dbo].[f_convert_int_to_2_digits](@input int) 
RETURNS varchar(10) 
AS 
BEGIN 
    --return value 
    DECLARE @return varchar(10) 

    if @input < 10 
    begin 
    set @return = '0' + convert(varchar(1), @valor) 
end 
    else 
    begin 
     set @return = convert(varchar(10), @input) 
    end 

    -- return result 
    RETURN @return 

END 

y luego usarlo en todas partes:
select [dbo].[f_convert_int_to_2_digits](<some int>)

+0

Gracias, intentaré esto :) –

0

Usted podría intentar esto

SELECT RIGHT('0' + convert(varchar(2) , '0'), 2) -- OUTPUTS : 00 
SELECT RIGHT('0' + convert(varchar(2) , '8'), 2) -- OUTPUTS : 08 
SELECT RIGHT('0' + convert(varchar(2) , '9'), 2) -- OUTPUTS : 09 
SELECT RIGHT('0' + convert(varchar(2) , '10'), 2) -- OUTPUTS : 10 
SELECT RIGHT('0' + convert(varchar(2) , '11'), 2) -- OUTPUTS : 11 

esto debería ayudar

13

Usted puede utilizar de T-SQL construido en función de formato:

declare @number int = 1 
select format (@number, '0#') 
+6

Eso es solo para SQL Server 2012+ – JumpingJezza

Cuestiones relacionadas