SQL Как получить упакованный десятичный пакет COMP-3?

Я создаю выходной файл ASCII, содержащий некоторую информацию, и два моих поля требуют, чтобы дата и время были в упакованных десятичных полях (COMP-3). Я использую SQL и SSIS для создания моего файла.

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

Я искал несколько сайтов и до сих пор не могу понять, как преобразовать дату / время в упакованное десятичное поле. Любая помощь будет принята с благодарностью.

Следующий сайт http://www.simotime.com/datapk01.htm был предоставлен для получения информации о упакованных полях. Я понимаю, как используются упакованные поля, но не совсем понимаю, как упаковать поле. Спасибо!

1 ответ

Решение

Если вы храните целочисленную дату (т.е. 20120123) в виде строки символов, шестнадцатеричное представление будет 0x3230313230313233, где 32 = 2, 30 = 0 и т. Д., Что составляет 8 байтов (то есть 32 30 31 32 30 31 32 33) памяти.

В упакованном десятичном формате представление той же строки будет выглядеть следующим образом: 0x020120123F F - бит, чтобы показать, что это целое число без знака. Остальные числа хранятся в виде половины байта для каждой цифры. Таким образом, вы можете видеть, что общая строка даты помещается в 5-байтовое поле (т. Е. 02 01 20 12 3F).

Таким образом, чтобы использовать это в SSIS, вам, вероятно, придется сделать то же самое, что и @billinkc, как указано выше, и использовать преобразование сценариев для преобразования поля. Механизм этого состоит в том, чтобы посчитать цифры в вашем номере, дополнить их цифрами 0 слева, чтобы получить ваших персонажей до 9 для comp-3 5 и 7 для comp-3 4, затем построить шестнадцатеричную строку с цифрами от вашей даты или время и добавьте F в конце (или C, если ваш пункт назначения ожидает подписанный номер).

Другие вопросы по тегам