admin

SQL如何获取COMP-3压缩十进制?

sql

我正在创建一个包含一些信息的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#TablePackedDecimal,以获取有关打包字段的信息。我了解打包字段的使用方式,但并不真正了解如何打包字段。谢谢!


阅读 249

收藏
2021-06-07

共1个答案

admin

如果您将整数日期(即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填充,以使comp-3
5的字符最多为9,comp-3
4的字符最多为7,然后构造一个十六进制的字符串,其中包含日期中的数字或时间,并在末尾添加F(如果目的地需要带符号的数字,则添加C)。

2021-06-07