1

I have an SQR program that uses a field called $EFFDT. It is NOT explicitly declared in the program as a date variable. What it currently does is get initially set to '' (blank) as follows:

LET $EFFDT = ' '

$EFFDT then gets set by reading a file from a field called $INPUT

read 1 into $Input:80 LET $EFFDT = substr($INPUT,53,8)

It then re-formats the date to get it into the format YYYY-MM-DD

do Format-DateTime($EFFDT,$EFFDT,{Prompt-Mask},'','native')

What I want to do in a later procedure is set $EFFDT to the $EFFDT value minus 1 day

What I tried adding in a later procedure is this:

LET $EFFDT = DATEADD($EFFDT, 'day', -1)

When I try running the SQR I get the SQR 4045 Error (Function or operator 'dateadd' requires a date argument'

From what I read this means that the $EFFDT variable needs to be declared as a date variable. So I explicitly declared this variable as a date, however then it errors when the program runs this part of the code:

LET $EFFDT = ' '

SQR 1944 - The date ' ' is not in the format specified by SQR_DB_DATE_FORMAT or in one of the accepted formats listed below....

So I'm not sure exactly how to proceed to either get around the original error or the 2nd error above. I ultimately need to use the $EFFDT - 1(day) as a field in a SQL Insert command. Any help is appreciated!

Nick
  • 268
  • 8
  • 33

1 Answers1

4

Try this

LET $EFFDT = ' '
! ...
LET $EFFDT = substr($INPUT,53,8)  
! At this point, I assume $EFFDT looks something like 20200228.  If not, change the mask below
LET $RESULT = DATEADD(STRTODATE($EFFDT, 'YYYYMMDD'), 'day', -1)

It seems that you have to do the STRTODATE on the same line as the DATEADD. For instance, the code below doesn't work for me

LET $EFFDT = ' '
! ...
LET $EFFDT = substr($INPUT,53,8)  
! At this point, I assume $EFFDT looks something like 20200228.  If not, change the mask below
LET $TEMPDT = STRTODATE($EFFDT, 'YYYYMMDD')
LET $RESULT = DATEADD($TEMPDT, 'day', -1)
Ben Rubin
  • 6,909
  • 7
  • 35
  • 82