在PostgreSQL中的两个日期之间获得结果,包括这两个日期

时间:2013-08-19 09:52:00

标签: ruby-on-rails 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。

2 个答案:

答案 0 :(得分:1)

使用end_date + 1 day<代替<=

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

我认为它应该比将表中的数据转换为date

更好

答案 1 :(得分: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_date投射到date类型(或使用date_trunc功能)也应该与OVERLAPS一起使用。

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