sql >> Databasteknik >  >> RDS >> Oracle

SQL datum och tid jämförelse från dubbel tabell

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')

skulle vara 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.




  1. SQL Server-markör - gå igenom flera servrar och kör en fråga

  2. ogiltig minnesadress eller noll pekare dereference golang databas

  3. I Oracle 11g hur tidsvikter du i genomsnitt data per timme mellan två datum?

  4. Postgresql PÅ KONFLIKT i sqlalchemy