Вычитание 1 дня из переменной даты, вызывающей ошибки - PullRequest
1 голос
/ 28 февраля 2020

У меня есть программа SQR, которая использует поле с именем $ EFFDT. NOT явно объявлено в программе как переменная даты. То, что он в данный момент делает, это изначально устанавливается в '' (пусто) следующим образом:

LET $EFFDT = ' '

$EFFDT, а затем устанавливается путем чтения файла из поля с именем $INPUT

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

Затем она переформатирует дату, чтобы получить ее в формате ГГГГ-ММ-ДД

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

Что я хочу Чтобы выполнить в более поздней процедуре, установите $ EFFDT в значение $ EFFDT минус 1 день

. То, что я пытался добавить в более поздней процедуре, таково:

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

Когда я пытаюсь запустить SQR, я получаю SQR 4045 Error (функция или оператор 'dateadd' требует аргумента даты '

Из того, что я прочитал, это означает, что переменная $ EFFDT должна быть объявлена ​​как переменная даты Таким образом, я явно объявил эту переменную как дату, однако тогда она выдает ошибку, когда программа выполняет эту часть кода:

LET $EFFDT = ' '

SQR 1944 - Дата '' не является в формате, указанном в SQR_DB_DATE_FORMAT, или в одном из допустимых форматов, перечисленных ниже ....

Так что я точно не уверен Чтобы перейти к исходной ошибке или 2-й ошибке, указанной выше. В конечном итоге мне нужно использовать $ EFFDT - 1 (день) в качестве поля в команде SQL Insert. Любая помощь приветствуется!

1 Ответ

3 голосов
/ 29 февраля 2020

Попробуйте это

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)

Кажется, вы должны сделать STRTODATE в той же строке, что и DATEADD. Например, приведенный ниже код не работает для меня

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)
...