【发布时间】:2021-12-01 09:15:57
【问题描述】:
我正在尝试使用以下查询检索数据集:
SELECT
p.homelaborlevelnm1,
p.workemailaddress,
r.requestitemid,
p.personfullname "EMPLOYEE Name",
p.personnum "EMPLOYEE ID",
p2.personfullname "SUPERVISOR",
p4.personfullname "PREVIOUS APPROVER",
p3.personfullname "NEXT APPROVER",
ri.approvalstepnum "APPROVAL_STEP",
r.creationdtm "SUBMIT_DATE",
r.startdtm "START_DATE",
r.enddtm "END_DATE",
rs.requeststatusnm "STATUS",
pc.name "PAY_CODE",
st.symbolicamounttypenm "SYMBOLIC_AMOUNT",
( gt.durationminqty / 60.00 ) "DURATION",
rst.requestsubtypnm "REQUEST_TYPE",
c.commenttext "COMMENT",
cdt.comntnotetxt "REASON FOR ABSENCE"
FROM
requestitem r
LEFT OUTER JOIN reqitemcomntmm rc ON rc.requestitemid = r.requestitemid
LEFT OUTER JOIN vp_allpersonv42 p ON p.personid = r.employeeid
LEFT OUTER JOIN comments c ON c.commentid = rc.commentid
LEFT OUTER JOIN comntnotedtl cdt ON cdt.comntnoteid = rc.comntnoteid
LEFT OUTER JOIN wtkemployee wtke ON wtke.employeeid = p.personid
LEFT OUTER JOIN vp_allpersonv42 p2 ON p2.personid = wtke.supervisorid
LEFT OUTER JOIN requeststatus rs ON rs.requeststatusid = r.requeststatusid
LEFT OUTER JOIN requestsubtype rst ON rst.requestsubtypid = r.requestsubtypid
LEFT OUTER JOIN glbtimeoffreqitem gt ON r.requestitemid = gt.requestitemid
LEFT OUTER JOIN symbolicamounttype st ON st.symbolicamounttypeid = gt.symbolicamounttypeid
LEFT OUTER JOIN paycode pc ON pc.paycodeid = gt.paycodeid
LEFT OUTER JOIN reqitemapproval ri ON ri.requestitemid = r.requestitemid
LEFT OUTER JOIN vp_allpersonv42 p3 ON p3.personid = ri.approverid
LEFT OUTER JOIN reqstatchange rsc ON rsc.requestitemid = r.requestitemid
LEFT OUTER JOIN vp_allpersonv42 p4 ON p4.personid = rsc.useraccountid
WHERE
r.requeststatusid = '4'
AND ( r.startdtm BETWEEN dateadd(d, - 7, current_timestamp) AND current_timestamp
OR r.enddtm BETWEEN dateadd(d, - 7, current_timestamp) AND current_timestamp )
ORDER BY
p.personnum,
rs.requeststatusnm,
r.startdtm;
很遗憾,我收到以下错误:
ORA-00904: "DATEADD": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 85 Column: 21
我以以下方式使用SYSDATE() 编辑了查询
SELECT
P.HOMELABORLEVELNM1,
P.WORKEMAILADDRESS,
/* CHANGE ABOVE LINE TO LABOR LEVEL THAT YOU TRACK DEPT IF IT ISN'T LL1 */
R.REQUESTITEMID,
P.PERSONFULLNAME "EMPLOYEE Name",
P.PERSONNUM "EMPLOYEE ID",
P2.PERSONFULLNAME "SUPERVISOR",
/* THE APPROVER AND APPROVAL_STEP FIELDS WILL BE NULL UNLESS APPROVAL SETTINGS ARE USED */
P4.PERSONFULLNAME "PREVIOUS APPROVER",
P3.PERSONFULLNAME "NEXT APPROVER",
RI.APPROVALSTEPNUM "APPROVAL_STEP",
R.CREATIONDTM "SUBMIT_DATE",
R.STARTDTM "START_DATE",
R.ENDDTM "END_DATE",
RS.REQUESTSTATUSNM "STATUS",
PC.NAME "PAY_CODE",
ST.SYMBOLICAMOUNTTYPENM "SYMBOLIC_AMOUNT",
/* DURATION WILL BE NULL IF THE EMPLOYEE REQUESTS FULL OR HALF DAYS */
(GT.DURATIONMINQTY/60.00) "DURATION",
RST.REQUESTSUBTYPNM "REQUEST_TYPE",
C.COMMENTTEXT "COMMENT",
CDT.COMNTNOTETXT "REASON FOR ABSENCE"
FROM
REQUESTITEM R
LEFT OUTER JOIN REQITEMCOMNTMM rc ON rc.REQUESTITEMID = r.REQUESTITEMID
LEFT OUTER JOIN VP_ALLPERSONV42 p ON p.PERSONID = r.EMPLOYEEID
LEFT OUTER JOIN COMMENTS c ON c.COMMENTID = rc.COMMENTID
LEFT OUTER JOIN COMNTNOTEDTL cdt ON cdt.COMNTNOTEID = rc.COMNTNOTEID
LEFT OUTER JOIN WTKEMPLOYEE wtke ON wtke.EMPLOYEEID = p.PERSONID
LEFT OUTER JOIN VP_ALLPERSONV42 p2 ON p2.PERSONID = wtke.SUPERVISORID
LEFT OUTER JOIN REQUESTSTATUS rs ON rs.REQUESTSTATUSID = r.REQUESTSTATUSID
LEFT OUTER JOIN REQUESTSUBTYPE rst ON rst.REQUESTSUBTYPID = r.REQUESTSUBTYPID
LEFT OUTER JOIN GLBTIMEOFFREQITEM gt ON r.REQUESTITEMID = gt.REQUESTITEMID
LEFT OUTER JOIN SYMBOLICAMOUNTTYPE st ON st.SYMBOLICAMOUNTTYPEID = gt.SYMBOLICAMOUNTTYPEID
LEFT OUTER JOIN PAYCODE pc ON pc.PAYCODEID = gt.PAYCODEID
LEFT OUTER JOIN REQITEMAPPROVAL ri ON ri.REQUESTITEMID = r.REQUESTITEMID
LEFT OUTER JOIN VP_ALLPERSONV42 p3 ON p3.PERSONID = ri.APPROVERID
LEFT OUTER JOIN REQSTATCHANGE rsc ON rsc.REQUESTITEMID = r.REQUESTITEMID
LEFT OUTER JOIN VP_ALLPERSONV42 p4 ON p4.PERSONID = rsc.USERACCOUNTID
WHERE R.REQUESTSTATUSID = '4'
AND R.STARTDTM BETWEEN SYSDATE-7 AND SYSDATE
OR R.ENDDTM BETWEEN SYSDATE-7 AND SYSDATE
ORDER BY p.PERSONNUM, RS.REQUESTSTATUSNM, R.STARTDTM;
现在虽然我没有收到任何错误,但我无法从所述查询中检索任何数据。
【问题讨论】:
-
首先,格式化您的代码,使其可读。其次,Oracle 中没有 DATEADD 函数。这是来自 sql server 的吗?