AdvancedAdvanced PostgreSQL
PostgreSQL-specific: range types
The query
SQL
-- Range types: very powerful PostgreSQL feature
SELECT
'[1, 10]'::int4range AS inclusive_range,
'(1, 10)'::int4range AS exclusive_range,
'[2024-01-01, 2024-12-31]'::daterange AS date_range;
-- Check overlaps, containment
SELECT
'[1,10]'::int4range @> 5 AS contains_5,
'[1,5]'::int4range && '[3,8]'::int4range AS overlaps,
'[1,5]'::int4range + '[4,8]'::int4range AS union_range;
-- Find overlapping project schedules
SELECT p1.name, p2.name
FROM projects p1
JOIN projects p2 ON p1.project_id < p2.project_id
AND daterange(p1.start_date, p1.end_date) && daterange(p2.start_date, p2.end_date);Note
“Range types: int4range, int8range, numrange, tsrange, daterange. @> = contains, && = overlaps, + = union.