【问题标题】:SQL How to get COMP-3 Packed Decimal?SQL 如何获得 COMP-3 压缩十进制?
【发布时间】:2012-01-23 15:29:55
【问题描述】:

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

【问题讨论】:

  • 一般的想法是您需要生成两个包含日期和时间值的整数字段Derived Column Transformation。我对 COMP-3 感到很痛苦,但我怀疑这更多是源数据不良的一个因素。连接 Script Transformation 以将这些值转换为等效的二进制文件并写入文件。
  • 我不确定在脚本转换中使用什么,因为我真的不明白我要转换成什么?因为我在上面列出的网站上看到了十六进制和二进制选项。我看不出日期 YYYYMMDD 是如何使用 Packed 方法放入 5 个字符中的。
  • 您需要 C#/VB.NET 中的例程来操作 Row.DateRow.Time SO 和 google 上的常见问题 Convert unpacked deicmal

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


【解决方案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)。

【讨论】:

  • 我明白你的意思和怎么做,但我不明白 (02 01 20 12 3F) 如何适合 5 个字符。我只是可能看错了,但我看到了 10 个字符。
  • 这两个数字对中的每一个都是一个字节(或字符)的信息。单个字节可以用 00 到 FF 之间的十六进制数表示(十进制从 0 到 255,二进制从 0000 0000 到 1111 1111)
  • 我正在将此信息写入一个文本文件,并且只有 5 个字符来包含打包日期。那么在上面的示例中,我将使用什么只占用一个字符位置? 00 或 FF 不会占用两个字符位置吗?我的文件将发送到 COBOL 大型机系统。感谢您的帮助!
  • 这是您发送的十六进制数字,而不是字符串。它看起来像一个字符串是错误的。看一个ascii图表。上例中五个字符中的最后一个是 3F(十六进制数)。在 ASCII 中,3F 字符是“?” 20(第三个字符)是一个空格。我在示例中引用的两位数字只是计算机内存中字符的内部计算机表示。你上过计算机理论课吗?
  • 我相信我曾经做过。我还知道您引用的两个数字是计算机内存中字符的表示形式,但我只是不确定 Packed 字段方法希望返回的值是什么。我不确定它是否需要 ASCII 值,或者我是否缺少其他东西,比如另一个转换过程。我在 Packed Fields 上几乎找不到任何东西,我想确保我发送的信息是正确的。我真的很感谢你的帮助!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多