Quelle est la meilleure pratique pour justifier un numéro numérique dans TSQL?Meilleure pratique pour justifier un numéro numérique dans TSQL
Je dois formater un fichier d'extraction de longueur fixe et avoir besoin d'avoir les champs numériques justifiés à droite. (J'utilise SQL Server 2005)
J'ai trouvé this, ce qui semble assez simple.
right(' '+convert(varchar(20),a.num),12)
Voici la déclaration complète Sélectionnez
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)
Je pose cette question parce que je trouve cette ligne de code au travail, qui apparaît Insanely complexe (Il supprime également la décimale et zéro remplissage)
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))
Mise à jour:
L'idée de Daniel Pratt d'utiliser une fonction m'a fait regarder SQL# (que nous possédons). Il a une fonction appelée PadLeft, qui étonnamment avait les mêmes paramètres et fonctionnalités que la fonction fn_PadRight de Daniel Pratt définie dans sa réponse ci-dessous.
Voici comment utiliser la fonction SQL #:
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,' ')
Il peut prendre les deux nombres et les chaînes.
est-il une raison que vous êtes désireux de faire cette justification directement dans votre code tsql et non dans la zone de sortie (par exemple un site Web, des services de rapports, etc. .?) Essayer de marteler la disposition dans le code de tsql lui-même est un gros WTF attendant pour arriver, à mon humble avis. – TheTXI
@TheTXI: Lisez plus attentivement. Il n'y a pas de "zone de sortie" autre qu'un extrait * fichier *. Comment un fichier d'extraction effectue-t-il le formatage des données? –
La question originale a dit que c'était pour un fichier "extrait". En tant que tel, il ne semble pas qu'il mélange les données et la présentation. –