从日期变量中减去 1 天导致错误

Subtracting 1 day from date variable causing errors

我有一个 SQR 程序,它使用一个名为 $EFFDT 的字段。它是 NOT 在程序中明确声明为日期变量。它目前所做的是初始设置为 ''(空白),如下所示:

LET $EFFDT = ' '

$EFFDT 然后通过从名为 $INPUT

的字段读取文件来设置

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

然后它会重新格式化日期,使其成为 YYYY-MM-DD 格式

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

我想在后面的过程中将 $EFFDT 设置为 $EFFDT 值减去 1 天

我在后面的过程中尝试添加的是这样的:

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

当我尝试 运行 SQR 时,我得到 SQR 4045 错误(函数或运算符 'dateadd' 需要日期参数'

据我了解,这意味着需要将 $EFFDT 变量声明为日期变量。所以我明确地将这个变量声明为日期,但是当程序运行这部分代码时它会出错:

LET $EFFDT = ' '

SQR 1944 - 日期“ ”不是 SQR_DB_DATE_FORMAT 指定的格式,也不是下面列出的可接受格式之一....

所以我不确定如何继续解决原始错误或上面的第二个错误。我最终需要将 $EFFDT - 1(day) 用作 SQL Insert 命令中的字段。感谢您的帮助!

试试这个

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)

看来您必须在 DATEADD 的同一行上执行 STRTODATE。例如,下面的代码对我不起作用

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)