PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

SQL заявка за търсене по ден/месец/година/ден&месец/ден&година и т.н

Можете да пишете поддържаеми заявки, които освен това са бързи, като използвате разширението 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);

Можете дори да го използвате, за да забраните припокриванията като ограничение на таблицата:

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

Всъщност е по-лесен за поддръжка, отколкото си мислите, напр.:

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

Но е много по-добре да използвате гореспоменатия тип период.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Принудително да се инсталира Postgres с кодиране UTF8, а не LATIN1?

  2. Oracle DBMS_LOB.WRITEAPPEND към Преобразуване на Postgres

  3. PostgreSQL RDS избягва твърдото кодиране на паролата за връзка, когато използва dblink_connect()

  4. postgre открива повтарящи се модели на нули

  5. Как да работим с таблици без PRIMARY KEY в Hibernate?