我有表测试,其中包括日期列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;
只有最后一个小黑客查询工作。 :|
有人能帮助我吗? :)
答案 0 :(得分:2)
我猜potatoeDate
的类型为timestamp
。
当您将date
与timestamp
进行比较时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'