我有下表A:
id
----
1
2
12
123
1234
Run Code Online (Sandbox Code Playgroud)
我需要id用零左键填充值:
id
----
0001
0002
0012
0123
1234
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Pat*_*ick 193
我相信这可能是你想要的:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
Run Code Online (Sandbox Code Playgroud)
要么
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
Run Code Online (Sandbox Code Playgroud)
我没有测试第二个例子的语法.我不确定这是否100%有效 - 可能需要一些调整 - 但它传达了如何获得所需输出的一般想法.
编辑
解决评论中列出的问题......
@ pkr298 - 是STR仅适用于数字... OP的字段是ID ...因此仅限数字.
@Desolator - 当然不起作用......第一个参数是6个字符长.你可以这样做:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
Run Code Online (Sandbox Code Playgroud)
这理论上应该移动目标岗位...随着数量变大,它应该始终有效......无论是1还是123456789 ......
因此,如果您的最大值是123456 ...您将看到0000123456,如果您的最小值是1,您将看到0000000001
Mik*_*son 58
declare @T table(id int)
insert into @T values
(1),
(2),
(12),
(123),
(1234)
select right('0000'+convert(varchar(4), id), 4)
from @T
Run Code Online (Sandbox Code Playgroud)
结果
----
0001
0002
0012
0123
1234
Run Code Online (Sandbox Code Playgroud)
Cri*_*ing 58
SQL Server现在支持从2012版开始的FORMAT功能,因此:
SELECT FORMAT(id, '0000') FROM TableA
Run Code Online (Sandbox Code Playgroud)
会做的.
如果您的ID或列位于a varchar并且代表您首先转换的数字:
SELECT FORMAT(CONVERT(INT,id), '0000') FROM TableA
Run Code Online (Sandbox Code Playgroud)
Mar*_*ara 38
老帖子,但也许这有助于某人:
要完成,最后会有4个非空白字符:
SELECT RIGHT ('0000'+COLUMNNAME, 4) FROM TABLENAME;
Run Code Online (Sandbox Code Playgroud)
要完成到10:
SELECT RIGHT ('0000000000'+COLUMNNAME, 10) FROM TABLENAME;
Run Code Online (Sandbox Code Playgroud)
小智 12
试试这个:
SELECT RIGHT(REPLICATE('0',4)+CAST(Id AS VARCHAR(4)),4) FROM [Table A]
Run Code Online (Sandbox Code Playgroud)
小智 8
- 请看看这些.
select FORMAT(1, 'd4');
select FORMAT(2, 'd4');
select FORMAT(12, 'd4');
select FORMAT(123, 'd4');
select FORMAT(1234, 'd4');
Run Code Online (Sandbox Code Playgroud)
- 我希望这些能帮到你
这适用于字符串,整数和数字:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
哪里4需要长度.适用于超过4位数的数字,返回NULL值为空字符串.