2011-09-07 55 views
4

當談到Oracle時,我非常習慣於初學者。我有麻煩搞清楚如何做類似這樣的東西:從使用SQL的日期中減去n天

SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS') 
FROM PEOPLE WHERE DATEBIRTH >= ANOTHERDATE - NDAY 

說得短,我要選擇大家誰特定的日期和時間之前出生N天,但我不太肯定這是做到這一點的方法,也不會讓我得到我期望的結果。

PS:我在oracle8i下開發。

+1

的Oracle 8i的?這甚至是支持嗎? – Ollie

+3

什麼阻止你**只是嘗試**? –

+0

@Ollie它不認爲它支持了,但我的客戶端不會升級。 – MrMokari

回答

3

你可能要考慮你的約會「ANOTHERDATE」的時間部分。

如果你只用整整兩天有關,那麼你可以重寫查詢爲:

SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS') 
    FROM PEOPLE 
WHERE DATEBIRTH >= TRUNC(ANOTHERDATE - NDAY) 

注:這是假設「NDAY」是一個數字。 「簡而言之,我想選擇在特定日期和時間之前N天出生的每個人,但我不確定這是否是這樣做的,也不是說它會給我期望的結果「。

我的第一個查詢會在「ANOTHERDATE」之前的「NDAY」天前爲您提供生日的所有人

這將讓你大家誰過生日ON那一天是「ANOTHERDATE」之前「NDAY」天:

SELECT id, 
     name, 
     TO_CHAR(datebirth, 'DD/MM/YYYY HH24:MI:SS') AS birth_date 
    FROM people 
WHERE TRUNC(datebirth) = TRUNC(anotherdate - NDAY); 

如果對「datebirth」列的索引,那麼你做不想與TRUNC把它包起來,所以你可以使用這將能夠使用任何指數「datebirth」如下:從它

SELECT id, 
     name, 
     TO_CHAR(datebirth, 'DD/MM/YYYY HH24:MI:SS') AS birth_date 
    FROM people 
WHERE datebirth >= TRUNC(anotherdate - NDAY) 
    AND datebirth < (TRUNC(anotherdate - NDAY) + 1); 
+0

你第一次查詢更多的是我正在尋找! – MrMokari

0

你必須轉換(anotherdate)明確迄今然後減去(ndays) :

SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS') 
    FROM PEOPLE 
WHERE DATEBIRTH >= TO_DATE(ANOTHERDATE) - NDAY 
-1

下面的查詢減n天從給定日期

select to_date('date') - 'n days' 
from dual 

例如:

select TO_DATE('02-Jul-16') - 90 
from dual