Was ist die beste Methode für die Rechtfertigung einer numerischen in TSQL?Best Practice für die Rechtfertigung einer Numerisch in TSQL
Ich muss eine Extraktdatei mit fester Länge formatieren und muss die numerischen Felder rechts ausgerichtet haben. (Ich benutze SQL Server 2005)
Ich fand this, die ziemlich einfach scheint. Hier
right(' '+convert(varchar(20),a.num),12)
ist die vollständige Select-Anweisung
select
a.num,
fixed_number =
right(' '+convert(varchar(20),a.num),12)
from
(
--Test Data
select num = 2400.00 union all
select num = 385.00 union all
select num = 123454.34
) a
Results:
num fixed_number
---------- ------------
2400.00 2400.00
385.00 385.00
123454.34 123454.34
(3 row(s) affected)
ich diese Frage bin zu fragen, weil ich diese Zeile Code bei der Arbeit gefunden, die GEISTESKRANK komplex erscheint (es ist auch das Dezimalsystem und Zerofilling entfernen)
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 benutzen, hat mich dazu gebracht, SQL# zu betrachten (was wir besitzen). Es hat eine Funktion namens PadLeft, die überraschenderweise die gleichen Parameter und Funktionen wie Daniel Pratts Funktion fn_PadRight hatte, die in seiner Antwort unten definiert wurde.
Hier ist, wie SQL # Funktion zu verwenden:
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 beide Zahlen und Strings nehmen.
Gibt es einen Grund, Sie wollen dieses Recht Rechtfertigung in Ihrem Tsql Code zu tun und nicht im Bereich der Ausgabe (dh eine Website, Reporting Services, etc. .?) Versuchen, Layout in Tsql-Code selbst zu hämmern ist eine große WTF warten, um zu passieren, IMHO. – TheTXI
@TheTXI: Lesen Sie mehr sorgfältig. Es gibt keinen "Ausgabebereich" außer einer Extraktdatei *. Wie führt eine Extraktdatei eine Formatierung der Daten durch? –
Die ursprüngliche Frage hat gesagt, dass dies für eine "Extrakt" -Datei war. Daher klingt es nicht so, als würde er Daten und Präsentationen mischen. –