用零填充一个数字,但只有它低于一定长度?

时间:2012-07-10 01:37:16

标签: sql sql-server sql-server-2008

我的号码必须至少为7位数。例如:

0000001
123456789
0012345

全部有效。只有当它的长度低于7时,我才需要用0填充数字。如何在SQL Server中执行此操作?如果长度小于7,我能得到的最好的是填充数字,但是在此之上,它会开始截断数字。

3 个答案:

答案 0 :(得分:6)

 SELECT CASE WHEN LEN(CONVERT(VARCHAR(12), column)) > 7 THEN 
    CONVERT(VARCHAR(12),column) ELSE
     RIGHT('0000000' + CONVERT(VARCHAR(12), column), 7) END
  FROM dbo.table;

答案 1 :(得分:0)

Aaron Bertrand打败了我。

我想补充说,封装字符和重复次数也是有用的,这样如果它需要在将来的某个时间进行更改,那么很容易做到。您可以使用REPLICATE执行此操作。所以扩展亚伦的例子:

DECLARE @num_digits as int = 7
SELECT RIGHT(REPLICATE('0', @num_digits) + col, @num_digits) FROM dbo.table;

答案 2 :(得分:0)

嗨检查一下。

declare @num table(num varchar(10))
insert into @num
VALUES('0000001'),('123456789'),('0012345'),('123'),('11')

select CASE when len(num) < 7 then REPLICATE('0',(7-len(num)))+num else num END from @num