2009-08-26 26 views
5

Se si dispone di una tabella con una colonna della data denominata myDate, con valori come 2009-08-25 09:00:09.0.Intervallo di date in PL/SQL (Oracle)

voglio selezionare tutte le righe per 25 agosto, da 12:00:01 fino 23:59:59 e niente per 26 agosto. E 'sufficiente usare semplicemente la condizione:

where myDate between Date '2009-08-25' and Date '2009-08-26' 

e voglio selezionare tutte le righe PRIMA 25 agosto, che non includono il 25. Agosto Posso fare:

where myDate < Date '2009-08-25' 

risposta

11

se si desidera che i dati per l'intera giornata 25 ed escludendo tutti i 26, è necessario rimuovere il primo secondo del 26:

where myDate >= Date '2009-08-25' and myDate < Date '2009-08-26' 

o

where myDate between Date '2009-08-25' and Date '2009-08-26' - interval '1' second 

Aggiornamento - Un po 'di precisione: In Oracle il tipo di dati DATE viene utilizzato sia per i tipi di 'Data' con o senza tempo. Se hai a che fare con date senza tempo, di solito viene memorizzato con un segmento di tempo di 00:00, che significa mezzanotte. Per questo motivo, il primo tra (my_date between '2009-08-25' and '2009-08-26') selezionerà potenzialmente due giorni interi.

Rimuovendo il primo secondo del 26, si garantisce che non sarà inavvertitamente selezionare le righe dal 26.

+0

Che cosa si intende per inizio di 26. Se non si include - 1/24/60/60 nella seconda query, che problema può avere? – Saobi

+0

il 26 inizia alle 00:00, quindi se si desidera escludere TUTTO il 26, è necessario rimuovere esplicitamente quel secondo –

+0

Sì, include SOLO 8-26 12:00:00 AM. Non un minuto dopo. Le probabilità che una riga si verifichi esattamente a mezzanotte è bassa, quindi va bene? – Saobi

-2
SELECT * 
FROM TABLE 
WHERE myDate BETWEEN myDate ('08/25/2009', 'MM/DD/YYYY') 
         AND myDate ('08/26/2009', 'MM/DD/YYYY') 
+0

è reale? – cr0ss

+0

Ha dimenticato TO_DATE prima delle parentesi –

1

Per ottenere tutto tra il 25 agosto, alle 12:00:01 fino alle 11 : 59: 59 PM, inclusiva, provate questo:

Where myDate Between to_Date('yyyymmddhh24miss', '20090825000001') 
        And to_Date('yyyymmddhh24miss', '20090825235959') 

(Perché stai escludendo la mezzanotte del 25 ?? Quel primo secondo (00:00:00) fa parte del 25 ° così ...)

Per ottenere tutto prima di agosto 25, provate questo:

Where myDate < to_Date('yyyymmdd', '20090825') 
Problemi correlati