Dobra, myślę, że cię mam. Chcesz wykonać następujące czynności?
select <columns>
from my_table
where state_date <= <some date>
and state_time <= <some time>
Dość niezwykłe jest dbanie o milisekundy, ale jeśli to zrobisz, powinieneś użyć systimestamp
.
Sądząc po tym, że podzieliłeś datę i godzinę, są to znaki, więc będę musiał odgadnąć maski formatu
. Jeśli się mylą, link powinien wskazać Ci, co zrobić. Nawiasem mówiąc, dzielenie daty w ten sposób nie jest mądre. Możesz utworzyć kolumnę, używając sygnatury czasowej
typ danych w Twojej tabeli, co sprawiłoby, że Twój problem byłby niezwykle prosty.
Tak więc nie wiem, dlaczego wybrałeś 'Dzień'
format zapytania, ale idąc z tym to_char(sysdate, 'DAY')
.
Z twojego komentarza poniżej to_char(sysdate, 'DD-MON-RR')
na_znak(sygnatura czasowa,'HH24:MI:SS:FF3')
, co dałoby sygnaturę czasową z dokładnością do milisekundy, chociaż typ danych może być z dokładnością do mikrosekundy.
Wydaje mi się to trochę dziwne, ale twoje pytanie brzmi:
select <columns>
from my_table
where state_date <= to_char(sysdate, 'DD-MON-YY')
and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')
Bardziej normalne byłoby przechowywanie daty jako ciągu znaków w formacie rrrrmmdd
więc przynajmniej możesz zagwarantować, że jest w porządku. Jeśli zrobiłeś coś takiego, po prostu zmień maskę formatu. Jeśli nie, te zapytania nie będą działać zgodnie z przeznaczeniem.
Osobiście, jeśli masz przechowywać dane w ten sposób i zakładając state_date
jest przechowywany jako, powiedzmy, dd-mon-yy
, czyli w tym rok, miesiąc ORAZ dzień i state_time
jest przechowywany jak wskazano powyżej, wtedy zrobiłbym coś takiego:
select <columns>
from my_table
where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
<= systimestamp
To sprawia, że o wiele bardziej oczywiste jest, co się dzieje i nie ma dwuznaczności co do tego, co <
oznacza w tej sytuacji, że data zawsze będzie mniejsza niż data przyszła, co niekoniecznie musi być prawdziwe dla łańcuchów.
Mam nadzieję, że to ma sens.