2009-08-26 10 views
5

Jeśli mam tabelę z kolumną Data o nazwie myDate, z wartościami takimi jak 2009-08-25 09:00:09.0.Zakres dat w języku PL/SQL (Oracle)

Chcę zaznaczyć wszystkie wiersze dla 25 sierpnia z 00:00:0123:59:59 i nic dla 26 sierpnia. Czy wystarczy po prostu użyć warunek:

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

I chcę, aby zaznaczyć wszystkie wiersze PRZED 25 sierpnia, nie włączając sie 25. Czy mogę zrobić:

where myDate < Date '2009-08-25' 

Odpowiedz

11

jeśli chcesz dane dla pełny dzień 25 oraz z wyłączeniem wszystkich 26, trzeba usunąć pierwszej sekundzie po 26:

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

lub

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

Aktualizacja - Trochę precyzji: W Oracle DATE typ danych jest używany zarówno dla typów „data” z lub bez czasu. Jeśli masz do czynienia z datami bez czasu, zwykle są one zapisywane z przedziałem czasu 00:00, co oznacza północ. Z tego powodu pierwszy spośród (my_date between '2009-08-25' and '2009-08-26') będzie potencjalnie wybierać dwa pełne dni.

Usuwając pierwszej sekundzie po 26, upewnić się, że nie przypadkowo wybrać wiersze z 26.

+0

Co masz na myśli przez Rozpoczęcie 26. Jeśli nie to - 1/24/60/60 w drugim zapytaniu, jaki problem może mieć? – Saobi

+0

26 rozpoczyna się o 00:00, więc jeśli chcesz wykluczyć WSZYSTKIE 26, musisz jednoznacznie usunąć tę drugą –

+0

Tak, obejmuje TYLKO 8-26 00:00:00. Nie minutę później. Szanse na pojawienie się rzędu dokładnie o północy są niskie, więc to jest w porządku? – Saobi

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

czy to naprawdę? – cr0ss

+0

Zapomniał TO_DATE przed nawiasami –

1

aby wszystko między Aug 25, przy aż 11 12:00:01 : 59: 59 PM włącznie, spróbuj tego:

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

(Czemu wyjątkiem północy 25 ?? to pierwsza sekund (00:00:00) jest częścią 25, jak również ...)

Aby uzyskać wszystko przed sierp 25, spróbuj tego:

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