2009-12-16 11 views
27

Je ne trouve pas de manière simple de faire cela dans T-SQL.T-SQL Format entier à la chaîne à 2 chiffres

je par exemple une colonne (SortExport_CSV) qui retourne un entier « 2 » à travers 90. Si le numéro enregistré est un seul chiffre, j'ai besoin de convertir en une chaîne à 2 chiffres qui commence par un 0. J'ai essayé d'utiliser CAST mais je suis coincé sur la façon d'afficher le style dans le format préféré (0 #)

Bien sûr, il est facile de faire cela sur le frontal (SSRS, MSAccess, Excel, etc) mais dans ce cas, je n'ai pas d'interface frontale et je dois fournir l'ensemble de données brutes avec la chaîne à 2 chiffres déjà formatée.

+0

Voir. Je vous ai dit :) –

Répondre

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

Genre de soignée, six variations SQL différentes sur le même problème ... – Sparky

0

ici vous allez

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

devrait retourner 02

+0

Whils c'est agréable d'utiliser la fonction REPLICATE, c'est un peu à la mer quand un simple '00' fera – cjk

+1

Mais c'est beaucoup plus agréable à maintenir – Scoregraphic

+0

Il n'est pas nécessaire d'utiliser REPLICATE. La chaîne de caractères unique '0' fera très bien l'affaire. – Guffa

5

Convertir la valeur à une chaîne, ajoutez un zéro en face de celui-ci (pour que ce soit deux ou caractères arbre), et obtenir le dernier à caractères:

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

Guffa ... J'avais abandonné depuis quelque temps mais il fonctionne parfaitement. Merci à tous pour vos réponses. Je suis débordé :) –

0

essayer

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

Luke, C'était celui que je cherchais. Utilisation simple et cohérente de CAST. Merci –

1

Un autre exemple:

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

est ici toute petite fonction qui a laissé la valeur pad par un caractère de remplissage donné Vous pouvez spécifier le nombre de caractères à capitonné à gauche ..

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 

Pour appeler:

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

Essayez cette

nombre --generate à partir 2 à 90

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

--program qui formate le nombre en fonction de la longueur

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

sortie partielle:

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

Vous êtes tous faire trop de travail:

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

Vous pouvez créer une fonction comme ceci:

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 

puis l'utiliser partout:
select [dbo].[f_convert_int_to_2_digits](<some int>)

+0

Merci, je vais essayer :) –

0

Vous pouvez essayer cette

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 

cela devrait aider

13

Vous pouvez utiliser construit en fonction du format de T-SQL:

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

Ce n'est que pour SQL Server 2012+ – JumpingJezza

Questions connexes