Question

Je crée un fichier de sortie ASCII contenant des informations et deux de mes champs nécessitent que la date et l'heure sont dans des champs décimaux emballés (COMP-3). J'utilise SQL et SSIS pour générer mon fichier.

Field Name     Format       Length    Picture
Date           YYYYMMDD     5         S9(8) C-3
Time           HHMMSS       4         S9(6) C-3

J'ai recherché plusieurs sites et je ne peux toujours pas comprendre comment convertir une date / heure en champ décimal emballé. Toute aide serait grandement appréciée.

Le site suivant http://www.simotime.com/datapk01.htm#tablepackeddecimal a été fourni pour des informations sur les champs emballés. Je comprends comment les champs emballés sont utilisés, mais je ne comprends pas vraiment comment emballer un champ. Merci!

Était-ce utile?

La solution

Si vous stockez une date entière (c'est-à-dire 20120123) en tant que chaîne de caractères, la représentation hexadécimale serait 0x3230313230313233 où 32 = 2, 30 = 0 etc, qui est de 8 octets (c'est-à-dire 32 30 31 32 30 31 32 33) de stockage.

Dans un format décimal emballé, la représentation de la même chaîne serait: 0x020120123f, le F est un peu à montrer qu'il s'agit d'un entier non signé. Les autres nombres sont stockés comme la moitié d'un octet pour chaque chiffre. Vous pouvez donc voir qu'une chaîne de date commune s'intégrerait dans un champ de 5 octets (c'est-à-dire 02 01 20 12 3f).

Donc, pour l'utiliser dans SSIS, vous auriez probablement à faire comme @billinkc indiqué ci-dessus et utiliser une transformation de script pour transformer le champ. La mécanique de cela serait de compter les chiffres de votre numéro, pad with 0 à gauche pour faire passer vos caractères à 9 pour comp-3 5 et 7 pour comp-3 4 puis construire une chaîne hexidécimale avec les chiffres de votre date ou le temps et ajoutez un F à la fin (ou un C si votre destination attend un numéro signé).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top