Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL如何获取COMP-3压缩十进制数?_Sql_Ssis_Ascii_Comp 3_Packed Decimal - Fatal编程技术网

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

SQL如何获取COMP-3压缩十进制数?,sql,ssis,ascii,comp-3,packed-decimal,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 我已经搜索了多个站点,但仍然不知道如何将日期/时间转换为压

我正在创建一个ASCII输出文件,其中包含一些信息,我的两个字段要求日期和时间在压缩的十进制字段中(COMP-3)。我正在使用SQL和SSIS生成我的文件

Field Name     Format       Length    Picture
Date           YYYYMMDD     5         S9(8) C-3
Time           HHMMSS       4         S9(6) C-3
我已经搜索了多个站点,但仍然不知道如何将日期/时间转换为压缩的十进制字段。任何帮助都将不胜感激


以下网站提供了有关压缩字段的信息。我知道如何使用压缩字段,但并不真正理解如何打包字段。谢谢

如果将整数日期(即20120123)存储为字符串,十六进制表示将为0x3230313230313233,其中32=2、30=0等,这是8字节(即32 30 33)的存储空间

在压缩十进制格式中,相同字符串的表示形式为: 0x0200123F F是表示这是一个无符号整数的位。其他数字存储为每个数字的半字节。因此,您可以看到一个通用的日期字符串可以放入一个5字节(ie 02 01 20 12 3F)字段中


因此,要在SSI中使用它,您可能必须按照上面所述的@billinkc操作,并使用脚本转换来转换字段。这种方法的原理是计算数字中的数字,在左边填充0,使comp-3 5的字符最多为9,comp-3 4的字符最多为7,然后用日期或时间的数字构造一个十六进制字符串,并在末尾添加一个F(或者如果目的地需要有符号的数字,则添加一个C)

一般的想法是,您需要生成两个整数字段,其中包含日期和时间值
派生列转换
。我对COMP-3感到痛苦,但我怀疑这更多是源数据不好的一个因素。连接
脚本转换
,将这些值转换为等效的二进制值并写入文件。我不确定在脚本转换中使用什么,因为我真的不明白转换到什么?因为我在上面列出的站点上看到十六进制和二进制作为选项。我不知道如何使用压缩方法将日期YYYYMMDD放入5个字符中。您需要在C#/VB.NET中使用一个例程来操作
行.date
行.Time
等常见问题和google我理解您的说法和操作方法,但我不理解(02 01 20 12 3F)如何放入5个字符中。我可能看错了,但我看到了10个字符。这两个数字对中的每一个都是一个字节(或字符)的信息。一个字节可以由一个介于00和FF之间的十六进制数表示(十进制为0到255,二进制为0000 0000到1111111)。我正在将此信息写入一个文本文件,并且只有5个字符包含压缩日期。那么在上面的例子中,我会使用什么只占据一个字符位置?00或FF不会占据两个字符的位置吗?我的文件将进入COBOL大型机系统。谢谢你的帮助!您发送的是一个十六进制数字,而不是字符串。它看起来像一根绳子。看看ascii图表。上面示例中的五个字符中的最后一个是3F(十六进制数)。在ASCII码中,3F字符是“?”,20(第三个字符)是空格。我在示例中引用的两位数只是计算机内存中字符的内部计算机表示。你上过计算机理论课吗?我想我曾经上过。我还知道您引用的两个数字是计算机内存中字符的表示形式,但我不确定压缩字段方法希望返回什么值。我不确定它是否需要ASCII值,或者是否缺少其他东西,比如另一个转换过程。我在压缩字段中几乎找不到什么,我想确保发送的信息正确无误。我真的很感谢你的帮助!谢谢