2013-05-10 68 views

回答

1

請嘗試以下查詢甲骨文

SELECT 
    * 
FROM 
    adhoc_request 
WHERE 
    trunc(sysdate-Crdate)<90 
+0

...和的crdate Rob 2013-05-10 09:28:02

+0

喜文我嘗試執行這個查詢即時得到下面的錯誤 – Anas 2013-05-10 09:34:55

+0

錯誤在第3行: ORA-00907:缺少右括號 – Anas 2013-05-10 09:35:34

1
select * 
from adhoc_request 
where Crdate < DATEADD("d", -90, current_date()) < 90); 

一些注意事項:

  • 在WHERE子句中不要使用功能上的謂詞。注意CrDate在我的代碼中是獨一無二的
  • DATEADD會精確提取90天,包括時間。 DATEDIFF計數午夜邊界
+0

DATEADD在Oracle中不可用 - SQL標記不*表示SQL服務器的問題。 – 2013-05-10 12:01:11

+0

對不起,如果我的評論冒犯了你 - 但DATEADD()*是一個SQL服務器函數(而CURRENT_DATE顯然是MySQL),所以我認爲你的解決方案只是SQL服務器。 – 2013-05-10 12:53:47

+0

我確實認爲MySQL但MySQL使用DATE_ADD。我沒有檢查語法。我在方言之間混淆有時 – gbn 2013-05-10 13:18:46

6
SELECT * 
FROM adhoc_request 
WHERE Crdate >= sysdate-90 

SYSDATE包括時間部分,例如「2013年4月13日9點45分51秒」

因此,實際上,查詢上運行的「2013年4月13日9點45分51秒」轉換爲

WHERE Crdate >= "2013-01-13 09:45:51" 

大衛的建議,工作更具有可預見性而且在大多數情況下更正確,這首先截斷SYSDATE服用90天關閉之前,只返回今天的日期,即

SELECT * 
FROM adhoc_request 
WHERE Crdate >= TRUNC(sysdate)-90 
+0

這個查詢正在工作...... thanks很多.. – Anas 2013-05-10 09:52:16

+1

並且考慮使用trunc(sysdate)-90如果你只想考慮完整的日子。 – 2013-05-10 10:01:27

+0

謝謝@David,突出點! – RichardTheKiwi 2013-05-10 10:11:05

0
Where trunc(Crdate) BETWEEN (trunc(sysdate)-INTERVAL '90' DAY) AND trunc(sysdate)