sql >> Database teknologi >  >> RDS >> PostgreSQL

SQL-forespørgsel til at søge efter dag/måned/år/dag&måned/dag&år osv

Du kan skrive vedligeholdelsesvenlige forespørgsler, der desuden er hurtige, ved at bruge pg/temporal-udvidelsen:

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

Du kan endda bruge det til at forbyde overlapninger som en tabelbegrænsning:

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

Det er faktisk mere vedligeholdeligt, end du måske tror, ​​f.eks.:

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

Men det er meget bedre at bruge den ovennævnte periodetype.




  1. databasegendannelse mislykkedes med flytning

  2. String_agg til SQL Server før 2017

  3. Tilføj IIS 7 AppPool-identiteter som SQL Server-logoner

  4. SQL Server-ydelse TOP CPU-forespørgsel -1