如何在SQL Server中将数字转换为带前导0的字符串

4
在SQL Server中,如果我有一个数字n,且n>=0 and n<=100,如何使用SQL将其转换为字符串?
1 => '01'
2 => '02'
...
10 => '10'
99 => '99'

这类似于printf函数。

printf ('%2d", n);

1
类似的问题在这里:https://dev59.com/nW035IYBdhLWcg3wPNdk - rsbarro
10个回答

12
只要 n 严格小于 100,你就可以使用。
  RIGHT(100+n,2)

在 SQL Server 2012 中,您还可以使用 FORMAT 函数,以下语句也有效,并且可以将 100 转换为 '100'。

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

2
select RIGHT('00'+ convert(varchar, @val), 3)

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

2
另一种方法(不确定您如何处理大于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

2

试试这个

SELECT FORMAT(ColumnName,'0000') FROM TableName

例如:

SELECT FORMAT(50,'0000')

输出:0050

1
你可以使用 SQL 的 LPAD 函数。
尝试以下操作:
SELECT LPAD(n, 2, 0);

Result
01
02
....
10

解释:LPAD函数将字符串左侧填充第三个参数(在给定示例中为0),直到达到第二个参数指定的长度(在给定示例中为2)。 更多示例
SELECT LPAD('hello', 10, '*');
Result :  *****hello

1

%2d需要在SQL Server中翻译为 2位数字格式。

尝试这个

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

结果:-
01

为了检查介于 0 到 100 之间的数字,请使用 case 语句

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

0
如果你正在使用两个整数进行操作,比如月份数字:
选择 RIGHT(CAST(MONTH(GETDATE())+100 AS VARCHAR(3)),2)
其中 "MONTH(GETDATE())" 是任何表达式。

0
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS YY FROM tableA

这是解决您问题的聪明方式...


0
SELECT FORMAT(2, '0#')       .

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接