当前位置:  开发笔记 > 编程语言 > 正文

最有效的T-SQL方式将左边的varchar填充到一定长度?

如何解决《最有效的T-SQL方式将左边的varchar填充到一定长度?》经验,为你挑选了6个好方法。

相比之下说:

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

AlexCuse.. 319

无论您如何操作,这只是SQL的低效使用.

也许是这样的

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

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

但正如我所说,你应该真的避免在你的数据库中这样做.



1> AlexCuse..:

无论您如何操作,这只是SQL的低效使用.

也许是这样的

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

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

但正如我所说,你应该真的避免在你的数据库中这样做.


+1刚刚测试了一堆不同的方法,这是最快的.你可能需要`RTRIM(@str)`但是如果它可以包含尾随空格.
有时需要它...例如,为分页屏幕获取数据子集.
这是一个很好的答案.当然,你不应该避免这样做,但有时它是不可避免的; 在我的情况下,由于部署限制,我无法选择在C#中执行此操作,并且有人将特许经营号码存储为INT,因为它应该是带有前导零的5字符数字字符串.这极大地帮助了我.

2> 小智..:

我知道这最初是在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.


尽管如此,这并不是"最有效"的方式.在此示例中,格式需要180秒对12秒.http://stackoverflow.com/a/27447244/73226

3> Kevin..:

有几个人提供了这个版本:

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

要小心,因为如果它长于n,它将截断你的实际数据.



4> Sklivvz..:
@padstr = REPLICATE(@padchar, @len) -- this can be cached, done only once

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



5> TonyP..:

也许过度杀戮我有这些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



6> Tom H..:

我不确定你提供的方法是否效率很低,但是另一种方法是,只要它不必在长度或填充字符中具有灵活性,就会(假设你想要用它来填充它) 0"到10个字符:

DECLARE
   @pad_characters VARCHAR(10)

SET @pad_characters = '0000000000'

SELECT RIGHT(@pad_characters + @str, 10)

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有