Postgres:按筛选日期范围查询sql

时间:2017-10-30 21:52:13

标签: sql postgresql date pgadmin datefilter

我有表测试,其中包括日期列potatoeDate。我想通过查询此列中的日期来记录。当我按日期从 Y .AA.AAAA查询 X .AA.AAAA时,总是从 Y .AA.AAAA获取记录到的(X-1) .AA.AAA。例如,我从2017年10月1日到2017年10月30日搜索,但是我从01-29.10.2017获得了记录。

我尝试了所知的一切,事件子查询但没有任何帮助。 我的尝试:

    Select n1.potatoeDate 
    FROM (SELECT potatoeDate from test WHERE  potatoeDate > '2017/05/07'::date) n1
    WHERE  n1.potatoeDate <= '2017/05/08'::date;

    select * 
    from test
    where potatoeDate between '2017/05/07' and '2017/05/08'

    SELECT potatoeDate from test
    where
    potatoeDate >= '2017/05/07' AND
    potatoeDate <= '2017/05/08'

--little hack
    SELECT potatoeDate from test
    WHERE  
    potatoeDate >= '2017/05/07'::date
    AND 
    potatoeDate <= ('2017/05/08'::date)+1;

只有最后一个小黑客查询工作。 :|

有人能帮助我吗? :)

2 个答案:

答案 0 :(得分:2)

我猜potatoeDate的类型为timestamp

当您将datetimestamp进行比较时timestamp更大(稍晚),如果它只有一秒钟。尝试将date投射到timestamp并查看其在时间字段中有00:00:00。因此,时间与timestamp不同的00:00:00会更大。

答案 1 :(得分:1)

我找到了解决方案(来自@Adam的信息有帮助)。 :)

在这种情况下,必须将where子句中的列名转换为 date 类型。更改后,所有查询都会返回预期结果。

示例:

select * 
from test
where potatoeDate::date between '2017/05/07' and '2017/05/08'

SELECT potatoeDate from test
where
potatoeDate::date >= '2017/05/07' AND
potatoeDate::date <= '2017/05/08'