นี่เป็นเทคนิคทั่วไปสำหรับการเว้นระยะห่างจากซ้ายไปจนถึงความกว้างที่ต้องการ:
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
ความยาวเพียงพอที่จะเก็บผลการแปลงด้วยการตัดทอน