相比之下说:
REPLICATE(@padchar, @len - LEN(@str)) + @str
AlexCuse.. 319
无论您如何操作,这只是SQL的低效使用.
也许是这样的
right('XXXXXXXXXXXX'+ rtrim(@str), @n)
其中X是您的填充字符,@ n是结果字符串中的字符数(假设您需要填充,因为您正在处理固定长度).
但正如我所说,你应该真的避免在你的数据库中这样做.
无论您如何操作,这只是SQL的低效使用.
也许是这样的
right('XXXXXXXXXXXX'+ rtrim(@str), @n)
其中X是您的填充字符,@ n是结果字符串中的字符数(假设您需要填充,因为您正在处理固定长度).
但正如我所说,你应该真的避免在你的数据库中这样做.
我知道这最初是在2008年被问到的,但是SQL Server 2012引入了一些新的功能.FORMAT功能简化了左边的填充.它还会为您执行转换:
declare @n as int = 2 select FORMAT(@n, 'd10') as padWithZeros
更新:
我想自己测试FORMAT功能的实际效率.我很惊讶地发现,与AlexCuse的原始答案相比,效率并不是很好.虽然我发现FORMAT功能更清洁,但在执行时间方面效率不高.我使用的Tally表有64,000条记录.荣誉对马丁·史密斯的指出了执行时间效率.
SET STATISTICS TIME ON select FORMAT(N, 'd10') as padWithZeros from Tally SET STATISTICS TIME OFF
SQL Server执行时间:CPU时间= 2157毫秒,已用时间= 2696毫秒.
SET STATISTICS TIME ON select right('0000000000'+ rtrim(cast(N as varchar(5))), 10) from Tally SET STATISTICS TIME OFF
SQL Server执行时间:
CPU时间= 31 ms,经过时间= 235 ms.
有几个人提供了这个版本:
right('XXXXXXXXXXXX'+ @str, @n)
要小心,因为如果它长于n,它将截断你的实际数据.
@padstr = REPLICATE(@padchar, @len) -- this can be cached, done only once SELECT RIGHT(@padstr + @str, @len)
也许过度杀戮我有这些UDF左右填充
ALTER Function [dbo].[fsPadLeft](@var varchar(200),@padChar char(1)='0',@len int) returns varchar(300) as Begin return replicate(@PadChar,@len-Len(@var))+@var end
并向右
ALTER function [dbo].[fsPadRight](@var varchar(200),@padchar char(1)='0', @len int) returns varchar(201) as Begin --select @padChar=' ',@len=200,@var='hello' return @var+replicate(@PadChar,@len-Len(@var)) end
我不确定你提供的方法是否效率很低,但是另一种方法是,只要它不必在长度或填充字符中具有灵活性,就会(假设你想要用它来填充它) 0"到10个字符:
DECLARE @pad_characters VARCHAR(10) SET @pad_characters = '0000000000' SELECT RIGHT(@pad_characters + @str, 10)