Hello! What is the best and the most correct way to discover the latest data comparing 2 datas contained in numeric variables (N8) in format YYYYMMDD?
Ex: I tried this, but I don’t know if this has ‘flaws’..
1 DATA-1 (N8) /* YYYYMMDD
2 DATA-2 (N8) /* YYYYMMDD
IF DATA-1 > DATA-2
WRITE 'Latest data is ' DATA-1
END-IF
Thanks in advance!
Define two variables
1 #D1 (D)
1 #D2 (D)
Then (apologies if my syntax is incorrect below as I’m doing this from memory – no longer have access to a Natural editor)
MOVE EDITED DATA-1 to #D1 (EM=YYMMDD)
MOVE EDITED DATA-2 to #D2 (EM=YYMMDD)
Now you can
IF #D1 > #D2
Hi Mick!
I tried to move the numeric variables to D variables, but when I STOW the program, I receive an error, probably because I have to move to alphanumeric variables first… but my question is: is there a simple way to obtain a correct result (just like comparing the 2 numeric variables or is it necessary to move to alpha, and then to D variables to compare them)?
Thanks in advance.
YYYYMMDD format will keep the values in ascending sequence. Your original comparison will work fine. There is no need to convert to D format.
D format is handy, though. It allows you to compute elapsed time very easily.
I agree with Ralph - your original comparison works fine.
If, as Ralph mentions, you want to compute elapsed time between two dates, D format is handy. Rather than moving the numeric dates to alpha, just redefine them:
01 #DATA-1 (N8)
01 redefine #DATA-1
02 #DATA1-A (A8)
...
MOVE EDITED #DATA-1-A TO #D1 (EM=YYYYMMDD)
...
Now you can use the format (D) field in computations (as well as comparisons).
As Ralph pointed out you can compare D/T to D/T variables directly (even to *DATX/*TIMX). Internally Date and Time variables are packed numbers representing the elapsed days/seconds from the beginning of time (as defined by Software AG or Copernicus - i.e. the beginning of the Gregorian Calendar in 1582). So that is why date arithmetic is easy and efficient.