2016-07-05 96 views
0

我在oracle數據庫上運行。我想找到所有在25歲前接受治療的受助者。我知道至少有500個,但我得到的結果是0.顯然,我的查詢是錯誤的。所以我認爲問題在於我減去日期的方式。他們都是表格中的日期類型。從我看到的情況來看,應該可以只減去兩個日期? 有人寫道他們使用DATEDIFF,但這對我不起作用。從兩個日期計算年份

select count(*) FROM V_Persons 
    where exists(select * from res_tx res, recipient rec, Treatment tr 
       where (tr.TREAT_DATE - rec.DATE_OF_BIRTH) < 25 
       and rec.ident = res.ident 
       and rec.ident = tr.ident) 
+0

你可以只減去兩個日期,但在甲骨文的日期基本arithmatic給出的答案在天。 – OTTA

回答

0

如果日期差異正如您期望的那樣在存在子查詢中的查詢中工作,請嘗試此操作來排除故障。

select * , (tr.TREAT_DATE - rec.DATE_OF_BIRTH) as DateDifference 
from res_tx res, recipient rec, Treatment tr 
       where (tr.TREAT_DATE - rec.DATE_OF_BIRTH) < 25 
       and rec.ident = res.ident 
       and rec.ident = tr.ident 
+1

'date_a - date_b'給出兩個日期之間的天數差異 - 所以這是檢查**日期與非年份之間是否有** 25天**的差異。 – MT0

3
SELECT COUNT(*) 
FROM V_Persons p 
WHERE EXISTS(
    SELECT 'X' 
    FROM recipient c 
     INNER JOIN Treatment r 
     ON (c.ident = r.ident) 
     INNER JOIN res_tx s  -- Do you need to join this table? 
     ON (c.ident = s.ident) 
    WHERE r.TREAT_DATE < ADD_MONTHS(c.DATE_OF_BIRTH, 25 * 12) 
    AND p.ident = c.ident   -- You need to correlate with the outer query. 
); 
+0

add_months在oracle中工作嗎? –

+0

是的。 https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions004.htm –