Questa condizione restituirà i record dalla Domenica al Sabato la scorsa settimana:
WHERE created BETWEEN
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7
AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER
C'è un esempio:
WITH compras AS (
SELECT (NOW() + (s::TEXT || ' day')::INTERVAL)::TIMESTAMP(0) AS created
FROM generate_series(-20, 20, 1) AS s
)
SELECT to_char(created, 'DY'::TEXT), created
FROM compras
WHERE created BETWEEN
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7
AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER
In risposta a @ d456:
Wouldn utilizzare BETWEEN
include la mezzanotte della domenica ad entrambe le estremità dell'intervallo?
Tale diritto, BETWEEN
include la mezzanotte della domenica ad entrambe le estremità dell'intervallo. Per escludere la mezzanotte di Domenica al termine dell'intervallo è necessario utilizzare gli operatori >=
e <
:
WITH compras AS (
SELECT s as created
FROM generate_series(-- this would produce timestamps with 20 minutes step
(now() - '20 days'::interval)::date,
(now() + '20 days'::interval)::date,
'20 minutes'::interval) AS s
)
SELECT to_char(created, 'DY'::TEXT), created
FROM compras
WHERE TRUE
AND created >= NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7
AND created < NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER
Grazie amico, la tua risposta mi ha aiutato a ottenere l'ultima settimana e la settimana prima della scorsa settimana. :) –
Non usare 'BETWEEN' include la mezzanotte della domenica ad entrambe le estremità dell'intervallo? – d456
@ d456, grazie per l'avviso. Hai ragione. Ho aggiornato la mia risposta. – Nicolai