Đây là một kỹ thuật tổng quát hơn cho phần đệm bên trái với bất kỳ chiều rộng mong muốn nào:
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)
Tuy nhiên, nếu bạn đang xử lý các giá trị âm và đệm với các số 0 đứng đầu, thì điều này cũng như các kỹ thuật được đề xuất khác sẽ không hoạt động. Bạn sẽ nhận được một cái gì đó trông như thế này:
00-123
[Có lẽ không phải là những gì bạn muốn]
Vì vậy, bạn sẽ phải vượt qua một số vòng bổ sung Đây là một cách tiếp cận sẽ định dạng đúng các số âm:
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
)
Người ta cần lưu ý rằng các convert()
cuộc gọi nên chỉ định một [n]varchar
độ dài đủ để giữ kết quả được chuyển đổi với cắt ngắn.