在sql服务器中,如果我有一个数字n
和n>=0 and n<=100
,如何将它转换为一个带有sql的字符串?如何将一个数字转换为带有0前缀的字符串在sql server中
1 => '01'
2 => '02'
...
10 => '10'
99 => '99'
这就像是printf。
printf ('%2d", n);
在sql服务器中,如果我有一个数字n
和n>=0 and n<=100
,如何将它转换为一个带有sql的字符串?如何将一个数字转换为带有0前缀的字符串在sql server中
1 => '01'
2 => '02'
...
10 => '10'
99 => '99'
这就像是printf。
printf ('%2d", n);
只要n严格少超过100个,你可以使用
RIGHT(100+n,2)
在SQL Server 2012中,您还可以使用格式,而下面的工作,也给你'100'为100.
FORMAT(n,'00','en-US')
%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
select RIGHT('00'+ convert(varchar, @val), 3)
我认为你需要'2'而不是'3'作为你的最后一个参数(如果你想'01'而不是'001')。否则,这对我来说似乎是最通用和最易读的解决方案。也可以用于计算的持久列(尽管由于某种原因,FORMAT被SQL服务器视为非确定性) – youen 2017-06-06 07:53:32
另一种方法(不确定你想如何处理大于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
这样做:
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
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS YY FROM tableA
这将解决你的问题,聪明的办法...
这里
类似的问题:http://stackoverflow.com/questions/5540064/ padleft-function-in-t-sql – rsbarro 2013-03-28 04:32:40