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

Oracle Vyberte datum mezi dneškem

Za předpokladu date_enter je DATE pole:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate)
   And CuRo.Date_Enter < trunc(sysdate) + 1;

trunc() funkce ve výchozím nastavení vyjme časovou část, takže trunc(sysdate) dává vám dnes ráno půlnoc.

Pokud konkrétně chcete zůstat u between a máte DATE ne TIMESTAMP , můžete udělat:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter between trunc(sysdate)
      And trunc(sysdate) + interval '1' day - interval '1' second;

between je inkluzivní, takže pokud si neuděláte ani vteřinu volna, pak byste potenciálně vyzvedli záznamy přesně od dnešní půlnoci; takže to vygeneruje čas 23:59:59, který jste hledali ve svém původním dotazu. Ale pomocí >= a < je podle mého názoru o něco jasnější a explicitnější.

Pokud jste si jisti, že stejně nemůžete mít data později než dnes, horní mez ve skutečnosti nic nepřidává a stejného výsledku byste získali pouze:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate);

Nechcete použít trunc nebo to_char na date_enter i když sloupec; použití jakékoli funkce zabrání použití indexu v tomto sloupci, což je důvod, proč váš dotaz s to_char byl příliš pomalý.



  1. Jak získat seznam všech procedur v balíčku oracle

  2. Zálohujte jednu tabulku s jejími daty z databáze na serveru SQL Server 2008

  3. MySQL Vyberte 3 náhodné řádky, kde součet tří řádků je menší než hodnota

  4. Tisknout hierarchická data v nadřazeném podřízeném formuláři neuspořádaný seznam php?