相比之下,说:

REPLICATE(@padchar, @len - LEN(@str)) + @str

当前回答

@padstr = REPLICATE(@padchar, @len) -- this can be cached, done only once

SELECT RIGHT(@padstr + @str, @len)

其他回答

@padstr = REPLICATE(@padchar, @len) -- this can be cached, done only once

SELECT RIGHT(@padstr + @str, @len)

我喜欢vnRocks的解决方案,这里是一个udf的形式

create function PadLeft(
      @String varchar(8000)
     ,@NumChars int
     ,@PadChar char(1) = ' ')
returns varchar(8000)
as
begin
    return stuff(@String, 1, 0, replicate(@PadChar, @NumChars - len(@String)))
end

这是我通常如何填充一个varchar

WHILE Len(@String) < 8
BEGIN
    SELECT @String = '0' + @String
END

无论如何,这都是一种低效的SQL使用。

也许是这样的

right('XXXXXXXXXXXX'+ rtrim(@str), @n)

其中X是填充字符,@n是结果字符串中的字符数(假设您需要填充,因为您处理的是固定长度)。

但我说过,应该避免在数据库中这样做。

可能有点夸张,我经常使用这个UDF:

CREATE FUNCTION [dbo].[f_pad_before](@string VARCHAR(255), @desired_length INTEGER, @pad_character CHAR(1))
RETURNS VARCHAR(255) AS  
BEGIN

-- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character
 RETURN ltrim(rtrim(
        CASE
          WHEN LEN(@string) < @desired_length
            THEN REPLACE(SPACE(@desired_length - LEN(@string)), ' ', @pad_character) + @string
          ELSE @string
        END
        ))
END

这样你就可以做这样的事情:

select dbo.f_pad_before('aaa', 10, '_')