sql >> Databáze >  >> RDS >> PostgreSQL

SQL dotaz pro vyhledávání podle dne/měsíce/roku/dne&měsíce/dne&roku atd

Pomocí rozšíření pg/temporal:

můžete psát udržovatelné dotazy, které jsou navíc rychlé

https://github.com/jeff-davis/PostgreSQL-Temporal

create index on events using gist(period(start_date, end_date));

select *
from events
where period(start_date, end_date) @> :date;

select *
from events
where period(start_date, end_date) && period(:start, :end);

Můžete jej dokonce použít k zakázání překrývání jako omezení tabulky:

alter table events
add constraint overlap_excl
exclude using gist(period(start_date, end_date) WITH &&);

Ve skutečnosti je udržitelnější, než si možná myslíte, např.:

select *
from events
join generate_series(:start_date, :end_date, :interval) as datetime
on start_date <= datetime and datetime < end_date;

Mnohem lepší je ale použít výše zmíněný typ období.




  1. Nelze přidat omezení cizího klíče MySql

  2. SQL dotaz pro nalezení N-tého nejvyššího platu z tabulky platů

  3. Získejte počet řádků v tabulce A, které mají odkaz na tabulku B

  4. Laravel - Opakovaný záznam s jedinečným parametrem pro různé uživatele