从oracle(日期类型)中选择日期之间的数据

时间:2018-04-14 12:19:49

标签: java oracle date jpa

我在我的数据库中有这些数据,我只希望在几天之间选择(不包括在内。从这些数据中,只需要从第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个结果,我做错了什么?我没有节省时间,我认为这对于这种类型的查询应该足够了。

谢谢

2 个答案:

答案 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

即可

应该没问题。