Search code examples
db2mainframedfsort

Converting 10-digit char data to DB2 BIGINT-type using DFSORT


I want to convert a 10-digit character field which contains numeric data to an 8-byte binary to insert into a DB2 BIGINT field.

INPUT
-------
1531245800ABC
1531457890DEF

OUTPUT
-------
<8 byte numeric data>ABC
<8 byte numeric data>DEF

Load card

LOAD DATA                      
LOG NO                       
REPLACE                      
UNICODE  CCSID(01208,00000,00000)
SORTDEVT SYSDA               
SORTNUM 12                   
INTO TABLE                   
<TABLE-NAME>                
KEEPDICTIONARY               
(                               
QUOTEID   POSITION (1) 
BIGINT   
,                              
GEO                             
POSITION (     9  )  CHAR MIXED(3))      

Solution

  • Using DFSORT symbols, to make things easier for you and future users:

    //TOBIGINT EXEC PGM=SORT 
    //SYMNAMES DD * 
    INPUT-CHARACTER-NUMERIC,1,10,ZD 
    INPUT-CHARACTER-REST,*,3,CH 
    //SYMNOUT DD SYSOUT=*
    //SYSOUT   DD SYSOUT=* 
    //SORTOUT  DD SYSOUT=* 
    //SYSIN    DD * 
      OPTION COPY 
    
      INREC BUILD=(INPUT-CHARACTER-NUMERIC,
                    TO=BI, 
                    LENGTH=8, 
                   INPUT-CHARACTER-REST) 
    //SORTIN   DD * 
    1531245800ABC 
    1531457890DEF 
    

    Or traditional coding of start, length, type:

    //TOBIGINT EXEC PGM=SORT 
    //SYSOUT   DD SYSOUT=* 
    //SORTOUT  DD SYSOUT=* 
    //SYSIN    DD * 
      OPTION COPY 
    
      INREC BUILD=(1,10,ZD, 
                    TO=BI, 
                    LENGTH=8, 
                    11,3) 
    //SORTIN   DD * 
    1531245800ABC 
    1531457890DEF 
    

    Output is X'000000005B44F4E8' followed by ABC and X'000000005B483162' followed by DEF.