2010-10-28 2 views
1

Je génère un fichier texte plat via un package SSIS. Le paquet lit les données d'une table, crée un fichier texte de longueur fixe et ftp le fichier à un partenaire.Conversion de types decimal et date/datetime en équivalents varchar personnalisés

Les données arrivent dans ma table via un processus que j'ai le contrôle afin que je puisse faire des ajustements basés sur des suggestions.

Mon problème est celui-ci.

J'ai deux champs, permet de les appeler: DateOfHire - allait stocker en datetime ou une date, bien que le temps est hors de propos bénéfices - ce sera toujours une échelle de 6 avec une décimale soit 2 de précision (6,2)

maintenant, ma question est la suivante, étant donné que la destination finale de ces deux champs va être un fichier texte, et je dois changer leur format avant écriture, dois-je les en tant que ce qu'ils devraient être stocké en tant que, c'est à dire une date en tant que date et une valeur décimale en tant que décimal ou devrais-je simplement faire le magasin de la table varchars?

La raison pour laquelle je pose est la suivante: Si la date de location est 10/07/10 -> l'enregistrement dans le fichier sera écrit 100710 Si les gains sont 250,99 $ -> l'enregistrement dans le fichier sera écrit comme 025099

C'est la première question.

La deuxième question est comment puis-je convertir une décimale comme 250.99 en 025099 étant donné que 9999.99 est le maximum absolu possible.

version SQL Server: 2008

Répondre

2

Question 1:

  • magasin approprié (date datetime etc). D'autres clients peuvent utiliser ces données. Et gardez-le lisible par l'homme.

  • Convertir dans le client (que ce soit pour le rendu dans une interface graphique ou pour une exportation de fichier) Pour une interface graphique, vous devrez peut-être définir des paramètres régionaux. Pour un fichier, je considérerais le faire dans SQL bien que dans le cadre de la bcp/read.

Question 2:

Ne pas convertir en numérique, mais comme une chaîne manipuler étant donné la façon dont il est simple. Et vous évitez DateType problèmes

Pour une valeur:

SELECT RIGHT('000000' + LTRIM(REPLACE(STR ('250.99', 7, 2), '.', '')), 6) 

ou en fonction de votre exemple de commutateur

CASE 
    WHEN Earnings = 250.99 THEN 
     --varchar, not decimal 
     RIGHT('000000' + LTRIM(REPLACE(STR ('250.99', 7, 2), '.', '')), 6) 
    ELSE CONVERT(varchar(6), DateOfHire, 12) --varchar. not datetime 
END AS Whatever 
0

D'abord, je ne vous recommande de stocker ces valeurs dans le champ varchar. Lorsque vous exportez les valeurs dans le fichier texte, vous pouvez utiliser une requête pour préparer les données.

Par exemple,

select convert(varchar(8), DateOfHire, 112) DateOfHireText, 
,replicate('0', 6- len(convert(varchar(10), CEILING(earnings * 100)))) + convert(varchar(10), CEILING(earnings * 100)) EarningsText 
from mytable 

Ce retour les données dans le format que vous voulez.

Questions connexes