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

时间:2012-01-23 15:29:55

标签: sql ssis ascii comp-3 packed-decimal

我正在创建一个包含一些信息的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,以获取有关已打包字段的信息。我理解如何使用压缩字段,但不太了解如何打包字段。谢谢!

1 个答案:

答案 0 :(得分:5)

如果将整数日期(即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)。

相关问题