我有两个日期,我想显示这两个日期的所有记录,包括那些日期。
我如何在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 :(得分: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_date
和end_date
投射到date
类型(或使用date_trunc
功能)也应该与OVERLAPS
一起使用。
SELECT *
FROM mytable
WHERE (start_date::date, end_date::date) OVERLAPS ('2012-01-01'::DATE, '2012-04-12'::DATE);