2016-04-29 134 views
4

我在我的sql表中有一列。我想知道如何在我的列的值小于10时将前导零添加到列中?因此,例如:如何在数字小于10时添加前导零?

number result 
1  -> 01 
2  -> 02 
3  -> 03 
4  -> 04 
10 -> 10 
+1

一般来说,你应该在表示层做这个格式,而不是在数据库层。 – RichardCL

+0

如果值大于100或1000,结果如何? –

回答

8
format(number,'00') 

版本> = 2012

+0

这是一个更优雅的解决方案,它处理负数 – RichardCL

8

您可以使用RIGHT

SELECT RIGHT('0' + CAST(Number AS VARCHAR(2)), 2) FROM tbl 

对于Number s的长度> 2,您使用CASE表达:

SELECT 
    CASE 
     WHEN Number BETWEEN 0 AND 99 
      THEN RIGHT('0' + CAST(Number AS VARCHAR(2)), 2) 
     ELSE 
      CAST(Number AS VARCHAR(10)) 
    END 
FROM tbl 
+0

谢谢,这很完美 – RedRocket

+1

@DragonBorn,这个解决方案效果很好,但请注意,在任何情况下,2位数以上的数字都会被剪切为2位数。可能导致奇怪的错误... – Shnugo

2

Felix的解决方案是伟大的,除非你在你的表格有100以上的数字,在这种情况下,尝试使用一个case语句来代替:

Select case when Number between 1 and 9 
    then '0' else '' end + cast(number as varchar(3)) 
+0

感谢您的帮助,我也会尝试 – RedRocket

1

另一种方法,

select case when number <10 then replicate('0',1)+cast(number as varchar) 
else cast(number as varchar) end 
+0

为什么使用REPLICATE?为什么不只是“0”? –

+0

伟大@FelixPamittan,你是对的。如果我们必须重复只有一个0然后复制将不会使用,但incase当0将重复,然后罚款。我只是想显示不同的方法,它也会帮助其他用户。 – KumarHarsh

1

而且还多了一个解决方案:

SELECT REPLACE(STR(@YourNumber,2),' ','0'); 

我喜欢这一点,因为其他的方法可能导致数的情况下,随机成果,这是超过您指定的数字的计数宽:

但它不会是负面的数字处理...

DECLARE @YourNumber INT=123; 
SELECT REPLACE(STR(@YourNumber,5),' ', '0') --pad to five digits 
     ,REPLACE(STR(@YourNumber,3),' ', '0') --pad to 3 digits 
     ,REPLACE(STR(@YourNumber,2),' ', '0'); --123 is wider than 2 digits... 

结果

0
123 
**