T-SQL中的PadLeft函数

Gal*_*ali 109 t-sql string

我有下表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

  • +1因为我一直想在不创建用户定义函数的情况下这样做.谢谢! (4认同)
  • STR()仅适用于数字(或字符串字段中的数字).如果您在varchar字段上使用它,而您假设其中包含一个数字但其中一个记录包含错误(非数字)数据,则此代码会中断.在这种情况下,RIGHT()函数不会中断. (4认同)
  • @Desolator我添加了一个响应和修复,以方便您添加的方案. (2认同)

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)

- 我希望这些能帮到你


Pio*_*rot 5

这适用于字符串,整数和数字:

SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)

哪里4需要长度.适用于超过4位数的数字,返回NULL值为空字符串.