从日期变量中减去 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)
我有一个 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)