Zakładając, że date_enter
to DATE
pole:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter >= trunc(sysdate)
And CuRo.Date_Enter < trunc(sysdate) + 1;
trunc()
funkcja domyślnie usuwa część czasu, więc trunc(sysdate)
daje ci północ dziś rano.
Jeśli szczególnie chcesz trzymać się between
i masz DATE
nie TIMESTAMP
, możesz zrobić:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter between trunc(sysdate)
And trunc(sysdate) + interval '1' day - interval '1' second;
between
jest inkluzywny, więc jeśli nie weźmiesz sekundy, potencjalnie odbierzesz nagrania dokładnie od północy; więc generuje to godzinę 23:59:59, której szukałeś w pierwotnym zapytaniu. Ale używając >=
i <
moim zdaniem jest nieco jaśniejszy i bardziej wyraźny.
Jeśli masz pewność, że i tak nie możesz mieć dat późniejszych niż dzisiaj, górna granica tak naprawdę niczego nie dodaje, a ten sam wynik uzyskasz po prostu:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter >= trunc(sysdate);
Nie chcesz używać trunc
lub to_char
w dniu date_enter
kolumna chociaż; użycie dowolnej funkcji uniemożliwia użycie indeksu w tej kolumnie, dlatego zapytanie z to_char
był zbyt wolny.