Creating a PostgreSQL `tsrange` from two timestamps Creating a PostgreSQL `tsrange` from two timestamps postgresql postgresql

Creating a PostgreSQL `tsrange` from two timestamps


Use tsrange() constructor:

WITH past_week AS (    SELECT date_trunc('day', NOW() + (s::TEXT || ' day')::INTERVAL)::TIMESTAMP(0) AS day     FROM generate_series(-7, 0, 1) AS s)SELECT tsrange(    date_trunc('day',         (SELECT day FROM past_week         WHERE EXTRACT(DOW FROM day) = '4') - '7 day'::INTERVAL),    date_trunc('day',         (SELECT day FROM past_week         WHERE EXTRACT(DOW FROM day) = '4')));                    tsrange                    ----------------------------------------------- ["2015-10-29 00:00:00","2015-11-05 00:00:00")(1 row)

Using CURRENT_DATE your query may be as simple as:

WITH previous_thursday AS (    SELECT CURRENT_DATE- EXTRACT(DOW FROM CURRENT_DATE)::int+ 4 AS thursday    )SELECT tsrange(thursday- '7d'::INTERVAL, thursday)FROM previous_thursday;