Was ist die beste Methode, um eine Zahl in TSQL rechtsbündig auszurichten?
Ich muss eine Datei im festen Längenformat formatieren und die numerischen Felder rechtsbündig haben. (Ich benutze SQL Server 2005)
Ich habe dieses gefunden, das ziemlich einfach erscheint.
right(' '+convert(varchar(20),a.num),12)
Hier ist die vollständige SELECT-Anweisung
select
a.num,
fixed_number =
right(' '+convert(varchar(20),a.num),12)
from
(
--Testdaten
select num = 2400.00 union all
select num = 385.00 union all
select num = 123454.34
) a
Ergebnisse:
num fixed_number
---------- ------------
2400.00 2400.00
385.00 385.00
123454.34 123454.34
(3 Zeile(n) betroffen)
Ich stelle diese Frage, weil ich diese Codezeile bei der Arbeit gefunden habe, die unglaublich komplex erscheint (Sie entfernt auch das Dezimalzeichen und füllt mit Nullen auf)
CAST(REPLACE(REPLICATE('0', 12 - LEN(REPLACE(CAST(CONVERT(DECIMAL(10,2),@DD8DBAMT) AS VARCHAR),'.','')))
+ CAST(CONVERT(DECIMAL(10,2),@DD8DBAMT) AS VARCHAR),'.','') AS VARCHAR(12))
Aktualisiert:
Daniel Pratts Idee, eine Funktion zu verwenden, hat mich dazu gebracht, SQL# (das wir besitzen) zu betrachten. Es hat eine Funktion namens PadLeft, die überraschenderweise die gleichen Parameter und Funktionen wie Daniel Pratts fn_PadRight Funktion in seiner unten stehenden Antwort hatte.
So verwenden Sie die SQL#-Funktion:
DECLARE @F6D2 AS DECIMAL(8,2)
SET @F6D2 = 0
SQL#.String_PadLeft(@F6D2,9,' ')
SQL#.String_PadLeft(123.400,9,' ')
SQL#.String_PadLeft('abc',9,' ')
Es kann sowohl Zahlen als auch Zeichenfolgen verwenden.