2013-03-28 51 views

回答

7

只要n严格超过100个,你可以使用

RIGHT(100+n,2) 

在SQL Server 2012中,您还可以使用格式,而下面的工作,也给你'100'为100.

FORMAT(n,'00','en-US') 
1

%2d需要转换为SQL Server中2 digit格式

试试这个

Declare @val int 
set @val=1 
SELECT RIGHT('0' + CAST(@val AS VARCHAR(2)), 2) 

结果: -

01 

为了之间0 to 100使用case检查号码声明

SELECT case when @val>0 and @val<100 then 
       RIGHT('0' + CAST(@val AS VARCHAR), 2) 
       else 
       NULL 
       END 
1
select RIGHT('00'+ convert(varchar, @val), 3) 
+0

我认为你需要'2'而不是'3'作为你的最后一个参数(如果你想'01'而不是'001')。否则,这对我来说似乎是最通用和最易读的解决方案。也可以用于计算的持久列(尽管由于某种原因,FORMAT被SQL服务器视为非确定性) – youen 2017-06-06 07:53:32

1

另一种方法(不确定你想如何处理大于99的数字):

DECLARE @numbers AS TABLE(Val INT) 
INSERT INTO @numbers VALUES(1) 
INSERT INTO @numbers VALUES(2) 
INSERT INTO @numbers VALUES(10) 
INSERT INTO @numbers VALUES(11) 
INSERT INTO @numbers VALUES(98) 
INSERT INTO @numbers VALUES(99) 
INSERT INTO @numbers VALUES(100) 
SELECT REPLACE(STR(Val, 2), ' ', '0') FROM @numbers 
0

这样做:

DECLARE @table AS TABLE(n INT) 
INSERT INTO @table 
VALUES(1),(3),(5),(9),(10),(50),(99),(100) 

Select Case When n<10 Then '0'+Cast(n as varchar(10)) Else Cast(n as varchar(10)) End From @table 
0
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS YY FROM tableA 

这将解决你的问题,聪明的办法...

这里
相关问题