PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie SQL do wyszukiwania według dnia / miesiąca / roku / dnia i miesiąca / dnia i roku itp

Możesz pisać łatwe w utrzymaniu zapytania, które są dodatkowo szybkie, używając rozszerzenia pg/temporal:

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

Możesz go nawet użyć, aby uniemożliwić nakładanie się jako ograniczenie tabeli:

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

W rzeczywistości jest łatwiejszy w utrzymaniu, niż mogłoby się wydawać, np.:

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

Ale znacznie lepiej jest użyć wyżej wymienionego typu okresu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ta sama osoba o różnych zachowaniach

  2. Jak automatycznie zwiększyć wartość alfanumeryczną w postgresql?

  3. postgresql powoduje automatyczne zwiększanie istniejącego klucza podstawowego podczas wstawiania

  4. Jak obsługiwane są instrukcje importu w plpythonie?

  5. Jak określić typy kolumn dla CTE (Common Table Expressions) w PostgreSQL?