sql >> Database >  >> RDS >> PostgreSQL

SQL-query om te zoeken op dag/maand/jaar/dag&maand/dag&jaar etc

U kunt onderhoudbare query's schrijven die bovendien snel zijn door de extensie pg/temporal te gebruiken:

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

U kunt het zelfs gebruiken om overlappingen als tabelbeperking niet toe te staan:

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

Het is eigenlijk beter te onderhouden dan je zou denken, bijvoorbeeld:

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

Maar het is veel beter om het bovengenoemde periodetype te gebruiken.




  1. PATINDEX() vervanging in MYSQL

  2. Hoe duplicaten te verwijderen, die worden gegenereerd met de functie array_agg postgres

  3. MySQL LOG10() Functie – Retourneer de Base-10 logaritme van een waarde

  4. Hoe selecteer je elke n-de rij van mysql