punto - SQL ¿Cómo obtener COMP-3 Packed Decimal?
punto decimal en cobol (1)
Estoy creando un archivo de salida ASCII que contiene cierta información y dos de mis campos requieren la fecha y la hora para estar en campos decimales empaquetados (COMP-3). Estoy usando SQL y SSIS para generar mi archivo.
Field Name Format Length Picture
Date YYYYMMDD 5 S9(8) C-3
Time HHMMSS 4 S9(6) C-3
He buscado en varios sitios y todavía no puedo entender cómo convertir una fecha / hora en un campo decimal empaquetado. Cualquier ayuda sería muy apreciada.
Se proporcionó el siguiente sitio http://www.simotime.com/datapk01.htm#TablePackedDecimal para obtener información sobre los campos empaquetados. Entiendo cómo se usan los campos empaquetados, pero realmente no entiendo cómo empacar un campo. ¡Gracias!
Si almacena una fecha entera (es decir, 20120123) como una cadena de caracteres, la representación hexadecimal sería 0x3230313230313233 donde 32 = 2, 30 = 0 etc., que son 8 bytes (es decir, 32 30 31 32 30 31 32 33) de almacenamiento.
En un formato decimal empaquetado, la representación de la misma cadena sería: 0x020120123F La F es un poco para mostrar que este es un entero sin signo. Los otros números se almacenan como la mitad de un byte para cada dígito. Entonces, puede ver que una cadena de fecha común cabría en un campo de 5 bytes (es decir, 02 01 20 12 3F).
Por lo tanto, para usar esto en SSIS probablemente tendrías que hacer como @billinkc indicado anteriormente y usar una Transformación de Script para transformar el campo. La mecánica de esto sería contar los dígitos en su número, pad con 0 a la izquierda para obtener sus personajes hasta 9 para comp-3 5 y 7 para comp-3 4 y luego construir una cadena hexadecimal con los dígitos de su fecha o la hora y agregue una F al final (o una C si su destino espera un número firmado).