Okay, jeg tror, jeg har dig. Vil du gøre følgende?
select <columns>
from my_table
where state_date <= <some date>
and state_time <= <some time>
Det er ret usædvanligt at bekymre sig om millisekunderne, men hvis du gør det, skal du bruge systimestamp
.
At dømme ud fra det faktum, at du har opdelt dato og klokkeslæt, er disse tegn, så jeg bliver nødt til at gætte formatmasker
. Hvis de tager fejl, bør linket guide dig til, hvad du skal gøre. Det er i øvrigt ikke klogt at dele en date op på denne måde. Du kan oprette en kolonne ved hjælp af tidsstemplet
data-type i din tabel, hvilket ville gøre dit problem ekstremt simpelt.
Så jeg ved ikke, hvorfor du har valgt 'Dag'
format til din forespørgsel, men går med den to_char(sysdate, 'DAY')
.
Fra din kommentar nedenfor
ville være to_char(sysdate, 'DD-MON-YY')
to_char(systimestamp,'HH24:MI:SS:FF3')
, hvilket ville give dig tidsstemplet til millisekund, selvom datatypen kan gå til mikrosekund.
Det forekommer mig lidt mærkeligt, men din forespørgsel ville så blive:
select <columns>
from my_table
where state_date <= to_char(sysdate, 'DD-MON-YY')
and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')
Det ville være mere normalt, hvis du gemmer en dato som en streng, at gemme den i formatet ååååmmdd
så du kan i det mindste garantere, at det er i orden. Hvis du har gjort noget som dette, skal du bare ændre formatmasken. Hvis du ikke har, vil disse forespørgsler ikke fungere efter hensigten.
Personligt, hvis du har at gemme data på denne måde og antage state_date
er gemt som f.eks. dd-man-åå
, dvs. inklusive år, måned OG dag og state_time
er gemt som angivet ovenfor, så ville jeg gøre noget som dette:
select <columns>
from my_table
where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
<= systimestamp
Det gør det meget mere indlysende, hvad der foregår, og der er ingen tvetydighed om, hvad <
betyder i denne situation, at en dato altid vil være mindre end en fremtidig dato, hvilket ikke nødvendigvis gælder for strenge.
Jeg håber, det giver mening.