我试图在WHERE子句中使用COALESCE
,我收到以下错误:
ORA-00907:缺少右括号失败的SQL stmt:
如果我删除了COALESCE
,我就不会再收到错误了。我不知道为什么它会给我这个错误,因为括号似乎是正确的。这是我的SQL语句:
SELECT S.OPRID, A.OPRNAME, S.EMAIL_ADDR
FROM TABLE1 S, TABLE2 A
WHERE COALESCE(S.REHIRE_DT,S.ORIG_HIRE_DT)
BETWEEN (TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM- DD'),'YYYY-MM-DD') - 3 DAY)
AND (TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD') - 1 DAY)
AND S.EMPLSTATUS = 'A'
AND A.EMPLID = S.EMPLID
ORDER BY S.OPRID
答案 0 :(得分:1)
取出“DAY”字样。这不是以这种方式在oracle中使用的:
SELECT S.OPRID, A.OPRNAME, S.EMAIL_ADDR
FROM TABLE1 S, TABLE2 A
WHERE COALESCE(S.REHIRE_DT,S.ORIG_HIRE_DT)
BETWEEN (TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM- DD'),'YYYY-MM-DD') - 3 )
AND (TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD') - 1 )
AND S.EMPLSTATUS = 'A'
AND A.EMPLID = S.EMPLID
ORDER BY S.OPRID
“DAY”是要用作EXTRACT功能一部分的关键字 - 请参阅Here 日期字段的默认减法单位已经是以天为单位。我不熟悉DB2,但我假设您对DAY的使用是特定于DB2的属性。那可能不是可移植的SQL。是的,oracle的错误消息有时会让人感到困惑。
现在我考虑一下,你可以用以下内容替换所有“TO_DATE”内容:
BETWEEN TRUNC(SYSDATE)-3 AND TRUNC(SYSDATE)-1