1

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

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 插入命令中的字段。任何帮助表示赞赏!

4

1 回答 1

4

试试这个

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)

看来您必须STRTODATEDATEADD. 例如,下面的代码对我不起作用

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)
于 2020-02-28T21:34:53.777 回答