sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL-fråga för att söka efter dag/månad/år/dag&månad/dag&år etc

Du kan skriva underhållsbara frågor som dessutom är snabba genom att använda tillägget 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);

Du kan till och med använda den för att inte tillåta överlappningar som en tabellrestriktion:

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

Det är faktiskt mer underhållbart än du kanske tror, ​​t.ex.:

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

Men det är mycket bättre att använda den ovan nämnda periodtypen.




  1. Hur får man tillgång till proceduren som returnerar uppsättningen av refkursor från PostgreSQL i Java?

  2. Django:duplicerat nyckelvärde bryter mot unik begränsning

  3. MySQL Left Joins:Välj allt från en tabell, men bara matchande värde i den andra tabellen med kriterier

  4. @OnDelete Hibernate-kommentar genererar inte ON DELETE CASCADE för MySql