sql >> Database teknologi >  >> RDS >> Oracle

Sql dato og klokkeslæt sammenligning fra dobbelt tabel

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 bliver to_char(sysdate, 'DAY') .

Fra din kommentar nedenfor ville være to_char(sysdate, 'DD-MON-YY')

ville være 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.




  1. CONCAT søjler med Laravel 5 veltalende

  2. Hvorfor fejler denne kode i PostgreSQL, og hvordan rettes den (omgås)? Er det Postgres SQL-motorfejl?

  3. SCD Type 4

  4. CakePHP HTML-tilbudskodningsproblemer