为了账号安全,请及时绑定邮箱和手机立即绑定

填充带有前导零的字符串,使其在SQLServer 2008中有3个字符长

填充带有前导零的字符串,使其在SQLServer 2008中有3个字符长

Cats萌萌 2019-07-02 09:54:52
填充带有前导零的字符串,使其在SQLServer 2008中有3个字符长当第一次在SQLServer2008R2中创建它时,我有一个最多3个字符的字符串。我想用前导零填充它,所以如果它的原始值是‘1’,那么新的值将是‘001’。或者,如果其原始值为“23”,则新值为“023”。或者,如果其原始值为‘124’,则新值与原始值相同。我正在使用SQLServer2008R2。我将如何使用T-SQL来完成这个任务?
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

如果字段已经是字符串,则此操作将有效。

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

如果你想让空显示为‘000’

它可能是一个整数-那么你会想

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

正如问题所要求的那样,这个答案只有在长度<=3时才有效,如果您想要更大的值,则需要将字符串常量和两个整数常量更改为所需的宽度。艾格'0000' and VARCHAR(4)),4


查看完整回答
反对 回复 2019-07-02
?
MM们

TA贡献1886条经验 获得超2个赞

虽然问题是关于SQLServer2008R2的,但是如果有人正在阅读这个版本2012及以上版本,那么使用格式.

您可以通过标准数字格式字符串或者是自定义数字格式字符串作为格式参数(谢谢瓦迪姆·奥夫钦尼科夫因为这个提示)。

对于这个问题,例如,下面的代码

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

产出

001
001


查看完整回答
反对 回复 2019-07-02
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

下面是一种更通用的技术,用于向左填充到任何需要的宽度:


declare @x     int     = 123 -- value to be padded

declare @width int     = 25  -- desired width

declare @pad   char(1) = '0' -- pad character


select right_justified = replicate(

                           @pad ,

                           @width-len(convert(varchar(100),@x))

                           )

                       + convert(varchar(100),@x)

但是,如果您处理的是负值,并填充前导零,则这和其他建议的技术都不起作用。你会得到这样的东西:


00-123

[可能不是你想要的]


所以…您必须跳过一些额外的循环,这里有一种方法可以正确地格式化负数:


declare @x     float   = -1.234

declare @width int     = 20

declare @pad   char(1) = '0'


select right_justified = stuff(

         convert(varchar(99),@x) ,                            -- source string (converted from numeric value)

         case when @x < 0 then 2 else 1 end ,                 -- insert position

         0 ,                                                  -- count of characters to remove from source string

         replicate(@pad,@width-len(convert(varchar(99),@x)) ) -- text to be inserted

         )

应该注意到,convert()调用应指定[n]varchar具有足够的长度来保持转换结果的截断。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 920 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信