2013-08-19 33 views
0

我有兩個日期,我想顯示這兩個日期中的所有記錄,包括這些日期。在PostgreSQL中的兩個日期之間獲取結果,包括這兩個日期

我怎麼能寫在PostgreSQL的查詢,

我發現

SELECT * 
    FROM mytable 
    WHERE (start_date, end_date) OVERLAPS ('2012-01-01'::DATE, '2012-04-12'::DATE); 

這裏既有天排除

SELECT * 
FROM tbl 
WHERE start_date <= '2012-04-12'::date 
AND end_date >= '2012-01-01'::date; 

這裏START_DATE排除。

+0

你在start_date和end_date列中有什麼類型? –

+0

postgress中的時間戳 – Debadatt

回答

1

更好,你可以使用

SELECT * 
FROM tbl 
WHERE start_date::date <= '2012-04-12'::date 
AND end_date::date >= '2012-01-01'::date; 

SELECT * 
FROM tbl 
WHERE date_trunc('day', start_date) <= '2012-04-12'::date 
AND date_trunc('day', end_date) >= '2012-01-01'::date; 

因爲時間戳記有分鐘,秒...值,它們「排除」您的數據。

鑄造start_dateend_datedate類型(或使用函數date_trunc)也應與OVERLAPS工作。

SELECT * 
    FROM mytable 
    WHERE (start_date::date, end_date::date) OVERLAPS ('2012-01-01'::DATE, '2012-04-12'::DATE); 
+0

嗯,它的工作..謝謝:) – Debadatt

1

使用end_date + 1 day<代替<=

SELECT * 
FROM tbl 
WHERE start_date < '2012-04-13'::timestamp 
AND end_date >= '2012-01-01'::timestamp; 

我認爲它應該執行比你的錶轉換數據,以date

相關問題