Les meilleures pratiques pour le droit justifiant un Numérique en TSQL
Quelle est la meilleure pratique pour le droit justifiant un numérique en TSQL?
Je dois formater une longueur fixe extraire le fichier et le besoin d'avoir les champs Numériques justifié à droite. (Je suis à l'aide de SQL Server 2005)
J'ai trouvé cette, ce qui semble assez simple.
right(' '+convert(varchar(20),a.num),12)
Ici, c'est la pleine instruction Select
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 j'ai trouvé cette ligne de code au travail, ce qui semble INCROYABLEMENT complexe (Il est également de supprimer la virgule zéro de 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:
Daniel Pratt idée d'utiliser une fonction me regardant SQL# (dont nous-mêmes). Il a une fonction appelée PadLeft, qui curieusement avait les mêmes paramètres et fonctionnalités que Daniel Pratt fn_PadRight fonction définie dans sa réponse ci-dessous.
Ici est de savoir comment utiliser SQL# fonction:
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 des chaînes.
Lire plus attentivement. Il n'y a pas de "zone de production" autre qu'un extrait de fichier. Comment fonctionne un extrait de fichier effectuer la mise en forme des données?
La question d'origine n'a dit que c'était pour un "extrait" du fichier. En tant que tel, il ne sonne pas comme il est un mélange de données et de la présentation.
Je vous conseille d'utiliser un tri normale d'instruction select puis générer le fichier d'extrait à l'aide d'un sprintf déclaration pour chaque ligne ou quelque chose de semblable. Il va vraiment vous garder sain d'esprit....
Je suis d'accord avec vous deux, mais c'est la façon dont d'autres extraits ont été créés dans notre société. Je suis nouveau à la création d'extraits de SQL Server et je suis en s'appuyant sur l'expertise de l'autre .NET/programmeurs SQL dans la société. Je sais DTS/SSIS mais ils ont couru dans les questions de l'aide.
OriginalL'auteur Gerhard Weiss | 2009-03-17
Vous devez vous connecter pour publier un commentaire.
La seule chose que je peux suggérer à aider avec la "les fous de la complexité est de l'encapsuler dans une ou plusieurs fonctions. Voici un peu modifié la version de quelque chose que nous faisons à l'aide de:
OriginalL'auteur Daniel Pratt
Votre ne va pas comme ma réponse, mais la meilleure pratique est de faire cela d'ailleurs SQL. SQL est destiné à stocker les récupérer et traiter les données n'ont pas le visualiser. Pas de format pour l'affichage. Vous seriez beaucoup mieux à mon humble avis, d'avoir une application console qui extrait les données, puis génère le fichier.
Mais avec qui le dit, quand je l'ai fait avant, j'ai fait comme ceci:
Coder en dur les espaces si méchant, ce sera probally pause pour un grand nombre, mais là encore, si votre génération d'un fichier fixe vous allez générer des ordures de toute façon pour un grand nombre
Modifier
Ken j'ai lu le ops post, et oui il est de formater les données dans une largeur fixe de fichier. Le point est que vous devez faire la mise en forme dans une couche d'application, pas en SQL. Oui il n'existe pas visuellement en regardant les données, mais je suppose que je me sens comme vous êtes encore la mise en forme des données, nous sommes probally fractionnement des poils.
Je doute que le fichier est en cours de création par le biais de l'application, la plupart de ces choses ar fait par le biais des emplois ou SSIS pacakages ou similaires et de ne jamais approcher de l'application.
OriginalL'auteur JoshBerke
La meilleure pratique serait d'avoir la base de données de données de retour, et d'avoir la couche de présentation format de données. Vous ne devriez pas être mise en forme des données dans la base de données.
J'ai maintenant ce que le commentaire des points que vous êtes en train de créer un extrait de fichier. Je me demande encore comment vous allez obtenir les données de SQL Serveur et dans le fichier. Sûrement SQL Server n'est pas de créer le fichier de disque par le biais d'une requête?
- Je encore vous recommandons de séparer les données de sa présentation, même si cette présentation est d'une longueur fixe de fichier. C'est ce genre de chose que nous avons l'habitude de faire "dans le bon vieux temps", mais devrait éviter d'aujourd'hui, maintenant que nous avons des ordinateurs assez rapide pour traiter avec des choses comme la séparation des préoccupations.
Bien que ce fut ma première pensée le sujet du message, il dit expressément qu'il a été la production d'une longueur fixe extrait de fichier.
OriginalL'auteur John Saunders