# ADDMONS function - conclusion after original locked

Author Message
sergeyken
Warnings : 2

Senior Member

Joined: 29 Apr 2008
Posts: 1030

Posted: Tue Nov 12, 2019 9:54 pm

Whenever either SORT utility, or any other software behavior becomes unclear, or available manuals might give more questions than answers, I always run some little test - just to verify the specific question, and nothing else of a bigger task.

Such test would also prevent others from reading the manuals in reverse order.

The SORT manual is saying only
 Quote: When the unit is months or years, a valid output date will always be created. For example, subtracting one month from a March 30th date will result in February 28th in a non-leap year and February 29th in a leap year.

This only means that any wrong result of date calculation is replaced with the nearest correct date value. There is no clue why one can suppose that under any circumstances the correct date 20200228 must be "corrected" to 20200229?
For myself this is clear both from the SORT manual statement, and from common sense. To be sure I usually run specific test to eliminate any doubts.
 Code: //*===================================================================== //SORT     EXEC  PGM=SORT                                                //SYSOUT   DD    SYSOUT=*                                                //SORTIN   DD    *                                                      20190131                                                                20190228                                                                20190229                                                                20190201                                                                20190210                                                                20190330                                                                20190331                                                                20190131                                                                20190201                                                                20190210                                                                20190220                                                                20190221                                                                20190222                                                                20190223                                                                20190224                                                                20190225                                                                20190226                                                                20190227                                                                20190228                                                                20190229                                                                20190201                                                                20190210                                                                20190330                                                                20190331                                                                20190131                                                                20190228                                                                20190229                                                                20190201                                                                20190210                                                                20190330                                                                20190331                                                                //*-+----1----+----2----+----3----+----4----+----5----+----6----+----7-- //SORTOUT  DD    SYSOUT=*                                                //SYSIN    DD *                                                           SORT FIELDS=COPY                                                         INREC BUILD=(1,8,                                                                  X,1,8,Y4T,ADDMONS,+1,TOGREG=Y4T,                                        X,1,8,Y4T,ADDMONS,+12,TOGREG=Y4T,                                        X,1,8,Y4T,ADDMONS,+13,TOGREG=Y4T)                             OUTFIL REMOVECC,                                                                BUILD=(/,                                                                       1,8,                                                                   X,10,8,                                                                 X,19,8,                                                                 X,28,8,C' <== ADDMONS',                                                 /,8X,                                                                   X,10,8,Y4T,LASTDAYM,TOGREG=Y4T,                                         X,19,8,Y4T,LASTDAYM,TOGREG=Y4T,                                         X,28,8,Y4T,LASTDAYM,TOGREG=Y4T,C' <== LASTDAYM'),                 HEADER1=(C'YYYYMMDD +1 MONTH +12MONTH +13MONTH',                                /,C'-------- -------- -------- --------')                  //*=====================================================================

The result is exactly what I expected from the very beginning

I'm glad that my common sense matches completely with the official SORT manual.
vasanthz

Global Moderator

Joined: 28 Aug 2007
Posts: 1689
Location: Tiruppur, India

Posted: Tue Nov 12, 2019 9:59 pm

 Quote: This only means that any wrong result of date calculation is replaced with the nearest correct date value.

This is the key take away here. When you pointed it out on your early reply, I understood this is how it worked and made sense. Logical and right. It need not be the last day if the resultant date is valid. Thank you
 View Bookmarks All times are GMT + 6 Hours

 Topic Forum Replies Similar Topics SKIP LOCKED DATA in UPDATE statement DB2 9 DB2 - row_number function - Need 1st ... DB2 5 How to Assign a Function key to Mainf... TSO/ISPF 4 Rexx STRIP Equivalent function in CLIST CLIST & REXX 5 OUTTRAP Equivalent function in CLIST CLIST & REXX 5
Search our Forums: