2

いくつかの情報を含む ASCII 出力ファイルを作成していますが、2 つのフィールドでは日付と時刻をパック 10 進数フィールド (COMP-3) にする必要があります。SQL と SSIS を使用してファイルを生成しています。

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

複数のサイトを検索しましたが、日付/時刻をパック 10 進数フィールドに変換する方法がまだわかりません。どんな助けでも大歓迎です。

次のサイトhttp://www.simotime.com/datapk01.htm#TablePackedDecimalは、Packed フィールドに関する情報を提供しています。パックされたフィールドがどのように使用されるかは理解していますが、フィールドをパックする方法はよくわかりません。ありがとう!

4

1 に答える 1

5

整数の日付 (つまり 20120123) を文字列として保存する場合、16 進表現は 0x3230313230313233 になります。ここで、32 = 2、30 = 0 などであり、8 バイト (つまり 32 30 31 32 30 31 32 33) のストレージです。

パック 10 進数形式では、同じ文字列の表現は次のようになります。 0x020120123F F は、これが符号なし整数であることを示すビットです。他の数値は、各桁の半分のバイトとして格納されます。したがって、一般的な日付文字列は 5 バイト (つまり 02 01 20 12 3F ) フィールドに収まることがわかります。

したがって、これを SSIS で使用するには、おそらく上記の @billinkc のようにし、スクリプト変換を使用してフィールドを変換する必要があります。この仕組みは、数字の桁数を数え、左側に 0 を埋め込んで、comp-3 5 の場合は 9 まで、comp-3 4 の場合は 7 までの文字を取得してから、日付の数字で 16 進数の文字列を作成することです。または時刻を入力し、最後に F を追加します (宛先が符号付きの番号を必要とする場合は C を追加します)。

于 2012-01-23T18:44:31.020 に答える