亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

填充帶有前導零的字符串,使其在SQLServer 2008中有3個字符長

填充帶有前導零的字符串,使其在SQLServer 2008中有3個字符長

Cats萌萌 2019-07-02 09:54:52
填充帶有前導零的字符串,使其在SQLServer 2008中有3個字符長當第一次在SQLServer2008R2中創建它時,我有一個最多3個字符的字符串。我想用前導零填充它,所以如果它的原始值是‘1’,那么新的值將是‘001’?;蛘撸绻湓贾禐椤?3”,則新值為“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 關注
  • 968 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號