sql >> Databáze >  >> RDS >> Oracle

Sql porovnání data a času z duální tabulky

Dobře, myslím, že tě mám. Chcete provést následující?

select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

Je poměrně neobvyklé starat se o milisekundy, ale pokud ano, měli byste použít systimestamp .

Soudě podle skutečnosti, že jste rozdělili datum a čas, jsou to znaky, takže budu muset uhodnout masky formátu . Pokud se mýlí, odkaz by vás měl navést, co dělat. Mimochodem, není moudré rozdělit rande tímto způsobem. Můžete vytvořit sloupec pomocí timestamp datového typu ve vaší tabulce, což by váš problém extrémně zjednodušilo.

Takže nevím, proč jste zvolili 'Day' formát pro váš dotaz, ale s tímto <some date> se změní na to_char(sysdate, 'DAY') .

Z vašeho komentáře níže <some date> by bylo to_char(sysdate, 'DD-MON-YY')

<some time> by bylo to_char(systimestamp,'HH24:MI:SS:FF3') , což by vám poskytlo časové razítko v milisekundách, i když datový typ může být v mikrosekundách.

Zdá se mi to trochu divné, ale váš dotaz by pak vypadal takto:

select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

Normálnější by bylo ukládat datum jako řetězec ve formátu yyyymmdd tak aspoň můžeš zaručit, že je to v pořádku. Pokud jste něco takového udělali, stačí změnit masku formátu. Pokud tak neučiníte, tyto dotazy nebudou fungovat podle očekávání.

Osobně, pokud máte ukládat data tímto způsobem a za předpokladu state_date je uložen jako, řekněme, dd-mon-yy , tj. včetně roku, měsíce A dne a state_time je uložen, jak je uvedeno výše, pak bych udělal něco takového:

select <columns>
  from my_table
 where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
        <= systimestamp

Díky tomu je mnohem jasnější, co se děje, a neexistuje žádná nejednoznačnost v tom, co < znamená, že v této situaci bude datum vždy menší než budoucí datum, což nemusí nutně platit pro řetězce.

Doufám, že to dává smysl.




  1. Jak TIME() funguje v MariaDB

  2. Vytiskněte výsledek mysqli SELECT Query

  3. Jak se připojit k IPv6 adresám v Kubernetes běžícím na Google Container Engine?

  4. jak uložit obsah ckeditoru v databázi mysql