MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

How to limit an output field size from concatenated fields

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Database
View previous topic :: View next topic  
Author Message
pcmoonbeam
Beginner


Joined: 21 Nov 2005
Posts: 31
Topics: 10
Location: Orange County, California

PostPosted: Thu Dec 11, 2008 5:11 pm    Post subject: How to limit an output field size from concatenated fields Reply with quote

I am trying to concatenate 3 columns in an SQL statement. The first column is an integer, but I only want the 4 low order digits of the column. The second column is decimal, the third is a name (varchar). Also the maximum length of the output field generated must be 25 characters or less.

What I'm trying to arrive at is this:

Input
column 1 = 000012345
column 2 = 19500101
column 3 = abcedfghijklmnop (this column can be 40 characters max)
desired output is:

234519500101abcdefghijklm

I am creating a '|' DELIMITED output file and need to do all the formatting within my SQL statement.

The code with the '--->' is the one in question. I know it's not the correct way to code the statement. That field plus the others can not exceed 25 bytes, and it can not have any trailing spaces.
Code:

           EXEC SQL                                                     
             DECLARE HRQCURS CURSOR FOR                                 
             SELECT                                                     
               RTRIM(FIRST_NAME)                                       
                 || '|' ||                                             
               RTRIM(LAST_NAME)                                         
                 || '|' ||                                             
               IFNULL (VARCHAR(MIDDLE_INITIAL),                         
               REPEAT(' ',1))                                           
                 || '|' ||                                             
               RTRIM(COMPANY_NAME)                                     
                 || '|' ||                                             
               IFNULL (VARCHAR(RTRIM(STREET1)),                         
               REPEAT(' ',1))                                           
                 || '|' ||                                             
               IFNULL (VARCHAR(RTRIM(REPLACE(STREET2,X'00', X'40'))),   
               REPEAT(' ',1))                                           
                 || '|' ||                                             
               IFNULL (VARCHAR(RTRIM(CITY)),                           
               REPEAT(' ',1))                                           
                 || '|' ||                                             
               IFNULL (VARCHAR(RTRIM(STATE)),                           
               REPEAT(' ',1))                                           
                 || '|' ||                                             
               IFNULL((VARCHAR(ZIP)),                                   
               (VARCHAR('0')))                                         
                 || '|' ||                                             
               IFNULL (VARCHAR(COUNTRY),                               
               REPEAT(' ',1))                                           
                || '|' ||                                               
               VARCHAR(FAMILY_ID) ||                                   
               SUBSTR(DIGITS(RELATION_ID ),8,3)                         
                || '|' ||                                               
               IFNULL (VARCHAR(MARITAL_STATUS),                         
               REPEAT(' ',1))                                           
                || '|' ||                                               
               IFNULL (VARCHAR(GENDER),                                 
               REPEAT(' ',1))                                           
                 || '|' ||                                               
                 '|' ||                                                 
                 '|'||                                                   
                 '|'||                                                   
                 '|'||                                                   
                IFNULL (VARCHAR(BIRTH_DATE),                             
                REPEAT(' ',1))                                           
                 || '|' ||                                               
                RELATION                                                 
                 || '|' ||                                               
                VARCHAR(FAMILY_ID)                                       
                 || '|' ||                                               
                 '|'||                                                   
                 '|'||                                                   
                SUBSTR(DIGITS(FAMILY_ID),7,4) ||                         
                IFNULL (VARCHAR(BIRTH_DATE),                             
                REPEAT(' ',1))  ||                                       
 --->           SUBSTR(VARCHAR(RTRIM(FIRST_NAME)),1,13)                 
                 || '|'||                                               
                 '|'||                                                   
                 '|'||                                                   
                SUBSTR(VARCHAR(DATE_FIRST_SENT),1,4) ||                 
                SUBSTR(VARCHAR(DATE_FIRST_SENT),6,2) ||                 
                SUBSTR(VARCHAR(DATE_FIRST_SENT),9,2)                     
                 || '|' ||                                               
                SUBSTR(VARCHAR(DEADLINE_DATE),1,4) ||                   
                SUBSTR(VARCHAR(DEADLINE_DATE),6,2) ||                   
                SUBSTR(VARCHAR(DEADLINE_DATE),9,2)                       
                 || '|' ||                                               
                 RTRIM(COVERAGE_LEVEL)                                   
                 || '|' ||                                               
                 RTRIM(PLANTYPE)                                         
                 || '|' ||                                               
                 VARCHAR(LOCALNO)                                       
                 || '|' ||                                               
                 IFNULL((VARCHAR(RTRIM(EMPLOYER_NAME))),                 
                 REPEAT(' ',1))                                         
                 || '|' ||                                               
                 RTRIM(HA_ELIGIBLE)                                     
                 || '|' ||                                               
                 RTRIM(MEM_STATUS)                                       
                 || '|' ||                                               
                 RTRIM(DUAL_COVERAGE)                                   
                 || '|' ||                                               
                 SUBSTR(DIGITS(SSNO),2,9)                               
                 || '|' ||                                               
                 RTRIM(MEMTYPE)                                         
                 || '|' ||                                               
                 '|' ||                                                 
                 '|' ||                                                 
                 '|' ||                                                 
                 VARCHAR(FAMILY_ID)                                     
                 ,FAMILY_ID                                             
                 ,RELATION_ID                                           
                 ,RELATION                                               
                 ,HRQ_ID                                                 
                 FROM FDBHRA.HRQ_OUT                                     
                 WHERE HRQ_STATUS = 'N'                                 
                   AND STREET1 IS NOT NULL                               
                   AND STREET1 NOT LIKE '%REMINDER%'                     
                   AND BIRTH_DATE > ' '                                 
                   AND BIRTH_DATE <> '00000000'                         
                   AND BIRTH_DATE IS NOT NULL                           
            END-EXEC.                                                   
           


RTRIM by itself in that concatenated field might not give the desired result if the first name exceeds 13 bytes.

Any Ideas?
_________________
Thanks,
PCMOONBEAM
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12376
Topics: 75
Location: San Jose

PostPosted: Thu Dec 11, 2008 5:40 pm    Post subject: Re: How to limit an output field size from concatenated fiel Reply with quote

pcmoonbeam wrote:
I am trying to concatenate 3 columns in an SQL statement. The first column is an integer, but I only want the 4 low order digits of the column. The second column is decimal, the third is a name (varchar). Also the maximum length of the output field generated must be 25 characters or less.

What I'm trying to arrive at is this:

Input
column 1 = 000012345
column 2 = 19500101
column 3 = abcedfghijklmnop (this column can be 40 characters max)
desired output is:

234519500101abcdefghijklm

RTRIM by itself in that concatenated field might not give the desired result if the first name exceeds 13 bytes.

Any Ideas?


Unless I am missing something isnt it this simple? I assumed that the max decimal column defintion is 8 bytes.

Code:

SELECT SUBSTR(DIGITS(INT_COL),7,4) ||
       DIGITS(DEC_COL)             ||
       SUBSTR(CHAR(VAR_COL),1,13)     
Back to top
View user's profile Send private message Send e-mail Visit poster's website
pcmoonbeam
Beginner


Joined: 21 Nov 2005
Posts: 31
Topics: 10
Location: Orange County, California

PostPosted: Thu Dec 11, 2008 5:52 pm    Post subject: Reply with quote

I'm not sure if you understood the problem Kolusu.
The decimal column is not really the issue. It's the var_char COL which is actually a first name. It can be up to 40 bytes, but the combined length of the 3 columns can not exceed 25 characters and there can be no trailing spaces.

Examples:
Code:

1) wrong format would be
     "|123419801030JAMES                 |"

2) correct foramt would be
Code:

     "|123419801030JAMES|"


The differece between the two examples is that the first one has trailing spaces after the name James, whereras the second example doesn't have trailing spaces.
The PIPE character '|' is the delimiter of the concatenated field.
_________________
Thanks,
PCMOONBEAM
Back to top
View user's profile Send private message
pcmoonbeam
Beginner


Joined: 21 Nov 2005
Posts: 31
Topics: 10
Location: Orange County, California

PostPosted: Thu Dec 11, 2008 5:54 pm    Post subject: Reply with quote

Kolusu,
Yes you are correct, the decimal column is 8 characters.
I didn't read your post carefully enough.

But still the problem is the character field which could be up to 40 bytes.
I hope my example was clear.
_________________
Thanks,
PCMOONBEAM
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12376
Topics: 75
Location: San Jose

PostPosted: Thu Dec 11, 2008 6:29 pm    Post subject: Reply with quote

pcmoonbeam wrote:
But still the problem is the character field which could be up to 40 bytes. I hope my example was clear.


4 bytes of integer column + 8 bytes of decimal column = 12 bytes. so you always pick the first 13 bytes of the varchar column and use RTRIM On the 13 bytes removing the trailing spaces resulting in 25 byte output in total

Try this

Code:

SELECT SUBSTR(DIGITS(INT_COL),7,4) ||
       DIGITS(DEC_COL)             ||
       RTRIM(SUBSTR(VAR_COL,1,13)) ||
       CHAR('|')                     


This will create records like this

Code:

234519500101ABCEDFGHIJKLM|
678923457622JAMES|



Kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
pcmoonbeam
Beginner


Joined: 21 Nov 2005
Posts: 31
Topics: 10
Location: Orange County, California

PostPosted: Thu Dec 11, 2008 7:13 pm    Post subject: Reply with quote

kolusu,

Thank you. I'll give it a try and let you know the result.
_________________
Thanks,
PCMOONBEAM
Back to top
View user's profile Send private message
pcmoonbeam
Beginner


Joined: 21 Nov 2005
Posts: 31
Topics: 10
Location: Orange County, California

PostPosted: Thu Dec 11, 2008 7:25 pm    Post subject: Reply with quote

KOLUSU,

It worked like a charm. Thank you very much. claps
_________________
Thanks,
PCMOONBEAM
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Database All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group