Hier ist eine allgemeinere Technik zum Links-Padding auf eine beliebige Breite:
declare @x int = 123 -- Wert, der aufgepolstert werden soll
declare @width int = 25 -- gewünschte Breite
declare @pad char(1) = '0' -- Aufpolsterzeichen
select right_justified = COALESCE(replicate(
@pad ,
@width-len(convert(varchar(100),@x))
), '')
+ convert(varchar(100),@x)
Wenn Sie jedoch mit negativen Werten arbeiten und mit führenden Nullen aufpolstern, wird weder diese noch eine andere vorgeschlagene Technik funktionieren. Sie erhalten etwas, das so aussieht:
00-123
[Wahrscheinlich nicht das, was Sie wollten]
Also ... Sie müssen einige zusätzliche Hürden nehmen. Hier ist ein Ansatz, der negative Zahlen korrekt formatiert:
declare @x float = -1.234
declare @width int = 20
declare @pad char(1) = '0'
select right_justified = stuff(
convert(varchar(99),@x) , -- Quellzeichenfolge (konvertiert aus numerischem Wert)
case when @x < 0 then 2 else 1 end , -- Einfügeposition
0 , -- Anzahl der Zeichen, die aus der Quellzeichenfolge entfernt werden sollen
replicate(@pad,@width-len(convert(varchar(99),@x)) ) -- einzufügender Text
)
Man sollte beachten, dass die convert()
-Aufrufe eine ausreichende Länge für ein [n]varchar
angeben sollten, um das konvertierte Ergebnis mit Abschneidung aufzunehmen.