Tình trạng này sẽ trả lại hồ sơ từ chủ nhật đến thứ bảy tuần trước:
WHERE created BETWEEN
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7
AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER
Có một ví dụ:
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
Trong câu trả lời cho @ d456:
wouldn Không sử dụng BETWEEN
bao gồm nửa đêm vào Chủ Nhật ở cả hai đầu của khoảng thời gian?
Quyền đó, BETWEEN
bao gồm nửa đêm vào Chủ Nhật ở cả hai đầu của khoảng thời gian. Để loại trừ nửa đêm ngày chủ nhật tại cuối khoảng thời gian đó là cần thiết để sử dụng các toán >=
và <
:
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
Cảm ơn người đàn ông, câu trả lời của bạn đã giúp tôi có được tuần cuối cùng và tuần trước tuần trước. :) –
Sẽ không sử dụng 'GIỮA 'bao gồm nửa đêm vào Chủ Nhật ở cả hai đầu của khoảng thời gian? – d456
@ d456, cảm ơn bạn đã thông báo. Bạn đúng rồi. Tôi đã cập nhật câu trả lời của mình. – Nicolai