0

我有两个日期,我想显示这两个日期中的所有记录,包括那些日期。

我如何在 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 不包括在内。

4

2 回答 2

1

使用end_date + 1 dayand<而不是<=

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

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

于 2013-08-19T09:53:37.153 回答
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_date类型(或使用函数)也应该与.end_datedatedate_truncOVERLAPS

SELECT *
   FROM mytable
  WHERE (start_date::date, end_date::date) OVERLAPS ('2012-01-01'::DATE, '2012-04-12'::DATE);
于 2013-08-19T09:56:28.933 回答