【发布时间】:2020-05-13 16:00:34
【问题描述】:
在我的表中,我有几个日期字段,当我运行查询时,我想将重新安排日期 (frsdt) 与截止日期 (frdte) 进行比较,并且只显示 > 3 天的记录。我拉了几天头发,以为我会寻求帮助。任何帮助将不胜感激。
SELECT fprod
,pord
,desc
,CASE
WHEN ftype = 'P'
THEN 'Planned'
ELSE 'Firm'
END
,vndnam
,fppvnd
,fqty
,DATE(TO_DATE(RTRIM(CHAR(fdate))
,DATE(TO_DATE(RTRIM(CHAR(frdte))
,DATE(TO_DATE(RTRIM(CHAR(frsdt))
,pecst * pqord
FROM avm
,kfp
,iiml01
,hpo
INTO
:tblPAM.colItmNbr
,:tblPAM.colPONbr
,:tblPAM.colDesc
,:tblPAM.colType
,:tblPAM.colVendor
,:tblPAM.colVendorId
,:tblPAM.colQty
,:tblPAM.colRelDate
,:tblPAM.colDueDate
,:tblPAM.colRescDate
,:tblPAM.colPOAmount
WHERE vendor = fppvnd
AND fprod = iprod
AND year(frsdt) < 9999
AND pldte > pddte + 3 days
AND month(frsdt)|| '/' || day(frsdt) || '/' || year(frsdt) > month(frdte)|| '/' || day(frdte) || '/' || year(frdte)
建议从重写查询开始
SELECT T.*
FROM
(
SELECT fprod
,pord
,desc
,CASE
WHEN ftype = 'P'
THEN 'Planned'
ELSE 'Firm'
END some_alias1
,vndnam
,fppvnd
,fqty
,DATE(TO_DATE(RTRIM(CHAR(fdate)) fdate_alias
,DATE(TO_DATE(RTRIM(CHAR(frdte)) frdte_alias
,DATE(TO_DATE(RTRIM(CHAR(frsdt)) frsdt_alias
,pecst * pqord some_alias2
FROM avm
,kfp
,iiml01
,hpo
WHERE vendor = fppvnd
AND fprod = iprod
) T
WHERE year(frsdt_alias) < 9999
AND pldte_alias > pddte_alias + 3 days
AND frsdt_alias > frdte_alias;
【问题讨论】:
-
您使用的是哪种格式的 SQL?
-
日期函数是非常产品特定的。请使用您正在使用的特定数据库标记您的问题。 Why should I “tag my RDBMS”?
-
我正在使用 Db2® for IBM® i 数据库。我是编程新手,所以我不确定你是否需要知道。对不起
-
试试
date1 > date2 + 3 day。date1&date2必须是date或timestamp数据类型。 -
@MarkBarinstein -- 我认为是
+ 3 DAYS,如果您使用DAY将不起作用