我在我的数据库中有这些数据,我只希望在几天之间选择(不包括在内。从这些数据中,只需要从第14天开始提取。
ID REFERENCE REQUEST_DATE (TYPE DATE)
2141777690 1500541052868 14/04/18
2141777750 1500541052868 14/04/18
2141777810 1500541052868 14/04/18
2141777870 1500541052868 14/04/18
2141777930 1500541052868 14/04/18
2141778080 1500541052868 14/04/18
2141778470 1500541052868 13/04/18
2141778590 1500541052868 13/04/18
2141778980 1500541052868 13/04/18
2141779010 1500541052868 13/04/18
2141779100 1500541052868 13/04/18
我尝试了这个(11个结果):
select count(entitypoll0_.ID) as col_0_0_ from MY_TABLE entitypoll0_
where entitypoll0_.POLL_ID=1500541052868
and entitypoll0_.REQUEST_DATE > TO_DATE('2018-04-13','YYYY-MM-DD')
and entitypoll0_.REQUEST_DATE < TO_DATE('2018-04-15','YYYY-MM-DD')
我尝试了这个(11个结果):
select count(entitypoll0_.ID) as col_0_0_ from MY_TABLE entitypoll0_
where entitypoll0_.POLL_ID=1500541052868
and (entitypoll0_.REQUEST_DATE between TO_DATE('2018-04-13','YYYY-MM-DD') and TO_DATE('2018-04-15','YYYY-MM-DD'));
顺便说一下,我在第14天只有5个结果,我做错了什么?我没有节省时间,我认为这对于这种类型的查询应该足够了。
谢谢
答案 0 :(得分:2)
你确定吗?最明显的解释是&#34;我没有节省时间&#34;
REQUEST_DATE
的值包含时间元素。您可以通过截断删除时间元素的列来轻松地检查这一点。这应该给你你期望的结果。
select count(entitypoll0_.ID) as col_0_0_
from MY_TABLE entitypoll0_
where entitypoll0_.POLL_ID=1500541052868
and trunc(entitypoll0_.REQUEST_DATE) > TO_DATE('2018-04-13','YYYY-MM-DD')
and trunc(entitypoll0_.REQUEST_DATE) < TO_DATE('2018-04-15','YYYY-MM-DD')
&#34;我假设使用日期类型(而不是时间戳等等)会给我没有时间的日期数据&#34;
Oracle的DATE datetype实际上是一个日期时间,它会使许多新用户感到困惑。 TIMESTAMP更精确(小数秒)并支持时区。
答案 1 :(得分:1)
根据这些数据,只需要从第14天开始提取。
只需使用AND REQUEST_DATE >= DATE '2018-04-14' and REQUEST_DATE < DATE '2018-04-14' + 1
应该没问题。