Okej, jag tror att jag har dig. Vill du göra följande?
select <columns>
from my_table
where state_date <= <some date>
and state_time <= <some time>
Det är ganska ovanligt att bry sig om millisekunderna men om du gör det bör du använda systimestamp
.
Att döma av det faktum att du har delat datum och tid är det här karaktärer, så jag måste gissa formatmasker
. Om de har fel bör länken vägleda dig om vad du ska göra. Det är förresten inte klokt att dela en dejt på det här sättet. Du kan skapa en kolumn med tidsstämpel
datatyp i din tabell, vilket skulle göra ditt problem extremt enkelt.
Så jag vet inte varför du har valt 'Dag'
formatet för din fråga men med den
blir to_char(sysdate, 'DAY')
.
Från din kommentar nedan
skulle vara to_char(sysdate, 'DD-MON-YY')
to_char(systimestamp,'HH24:MI:SS:FF3')
, vilket skulle ge dig tidsstämpeln till millisekund, även om datatypen kan gå till mikrosekund.
Det verkar lite konstigt för mig men din fråga skulle då bli:
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 skulle vara mer normalt att lagra ett datum som en sträng i formatet ååååmmdd
så du kan åtminstone garantera att det är i sin ordning. Om du har gjort något liknande, byt bara formatmasken. Om du inte har det kommer dessa frågor inte att fungera som avsett.
Personligen, om du har för att lagra data på detta sätt och anta state_date
lagras som, säg, dd-mån-åå
, dvs. inklusive år, månad OCH dag och state_time
lagras enligt ovan, då skulle jag göra något så här:
select <columns>
from my_table
where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
<= systimestamp
Det gör det mycket mer uppenbart vad som pågår och det finns ingen tvetydighet om vad <
betyder i den här situationen eftersom ett datum alltid kommer att vara mindre än ett framtida datum, vilket inte nödvändigtvis gäller för strängar.
Jag hoppas att detta är vettigt.