Ranges
Range start..end
represents as set of values between start
and end
, inclusive (greater of equal to start
and less than or equal to end
).
To express a range that is open on one side, either start
or end
can be omitted.
Ranges can be used in filters with the in
function, with any type of literal, including dates:
PRQL
from events
filter (created_at | in @1776-07-04..@1787-09-17)
filter (magnitude | in 50..100)
derive is_northern = (latitude | in 0..)
SQL
SELECT
*,
latitude >= 0 AS is_northern
FROM
events
WHERE
created_at BETWEEN DATE '1776-07-04' AND DATE '1787-09-17'
AND magnitude BETWEEN 50 AND 100
Ranges can also be used in take
:
PRQL
from orders
sort {-value, created_at}
take 101..110
SQL
SELECT
*
FROM
orders
ORDER BY
value DESC,
created_at
LIMIT
10 OFFSET 100
Note
Half-open ranges are generally less intuitive to read than a simple >=
or <=
operator.
See also
Roadmap
We’d like to use ranges for other types, such as whether an object is in an array or list literal.