2013-12-20 36 views
-2

我想在WHERE子句中使用COALESCE之內,我收到以下錯誤:SQL:合併where子句給錯誤的Oracle(而不是在DB2)

ORA-00907: missing right parenthesis Failed 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 
+1

什麼用「天」在TO_DATE電話是? – OldProgrammer

+1

是LitteBobbyTables,我已經把這兩個表達式放在了Coalesce函數中。 – startedFromTheBottom

+0

OldProgrammer,我們從當前日期減去3天,並檢查表中的日期是否在最近兩天內。 – startedFromTheBottom

回答

1

把「天」字。未在預言在該方式中使用:

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