我有一个最多3个字符长的字符串,当它第一次创建在SQL Server 2008 R2。

我想用前导零填充它,所以如果它的原始值是“1”,那么新值将是“001”。或者如果它的原始值是“23”,那么新的值是“023”。或者如果它的原始值为124,则新值与原始值相同。

我使用的是SQL Server 2008 R2。如何使用T-SQL做到这一点?


当前回答

写这个是因为我有一个特定的长度要求(9)。 仅当输入需要填充时,才使用@pattern填充左侧。 应该总是返回@pattern中定义的长度。

declare @charInput as char(50) = 'input'

--always handle NULL :)
set @charInput = isnull(@charInput,'')

declare @actualLength as int = len(@charInput)

declare @pattern as char(50) = '123456789'
declare @prefLength as int = len(@pattern)

if @prefLength > @actualLength
    select Left(Left(@pattern, @prefLength-@actualLength) + @charInput, @prefLength)
else
    select @charInput

1234年返回输入

其他回答

用固定长度的方法试试。

select right('000000'+'123',5)

select REPLICATE('0', 5 - LEN(123)) + '123'

如果字段已经是一个字符串,这将起作用

 SELECT RIGHT('000'+ISNULL(field,''),3)

如果你想让null值显示为000

它可能是一个整数,然后你会想

 SELECT RIGHT('000'+CAST(field AS VARCHAR(3)),3)

根据问题的要求,这个答案只在长度<= 3时有效,如果你想要更大的东西,你需要改变字符串常数和两个整数常数为所需的宽度。例如“0000”和VARCHAR(4)),4

对于整数,你可以使用从int到varchar的隐式转换:

SELECT RIGHT(1000 + field, 3)

虽然这个问题是针对SQL Server 2008 R2的,但如果有人阅读的是2012或更高版本的SQL Server,从那时起,使用FORMAT就变得简单多了。

您可以传递一个标准的数字格式字符串或自定义的数字格式字符串作为format参数(感谢Vadim Ovchinnikov提供的提示)。

对于这个问题,比如一个代码

DECLARE @myInt INT = 1;
-- One way using a standard numeric format string
PRINT FORMAT(@myInt,'D3');
-- Other way using a custom numeric format string
PRINT FORMAT(@myInt,'00#');

输出

001
001

当我需要固定大小的varchar(或字符串)输出时,我用整数列作为输入有类似的问题。例如,1到'01',12到'12'。这段代码工作:

SELECT RIGHT(CONCAT('00',field::text),2)

如果输入也是varchar的列,则可以避免强制转换部分。