根据日期从数据库中获取结果而不考虑时间
Posted
技术标签:
【中文标题】根据日期从数据库中获取结果而不考虑时间【英文标题】:Fetch results on the basis of date from db without considering time 【发布时间】:2015-07-13 17:53:07 【问题描述】:我想从数据库中获取特定日期发生的结果。问题是数据库包含日期+时间,但我只需要基于日期部分的结果。
@Query("from TableA where traveller = ?1 and direction = ?2 and targetDate = ?3")
List<TableA> findListOfRequestsWithDateAndTraveller(String traveller, String direction, Date date);
【问题讨论】:
您使用的是哪个数据库,对于Oracle,您可以将时间和日期过滤 @SaurabhJhunjhunwala 这是杀死日期时间列索引的最佳方法。应该做的是between
,将午夜的特定日期(包括)作为下限,将第二天午夜(排除)作为上限。
@fge: BETWEEN
会有点不准确,因为它包括下限和上限。准确地说:x >= date AND x < (date + 1)
.
【参考方案1】:
尝试使用日期功能,可在此处找到:date(timestamp_field)
@Query("from TableA where traveller = ?1 and direction = ?2 and date(targetDate) = ?3")
List<TableA> findListOfRequestsWithDateAndTraveller(String traveller, String direction, Date date);
【讨论】:
【参考方案2】:我通过在java而不是查询下处理它解决了这个问题。
@Query("from TableA where traveller = ?1 and direction = ?2 and targetTime >= ?3 and targetTime <= ?4")
List<PBillableRequest> findListOfRequestsWithDateAndTraveller(String traveller, String direction, Date startDate, Date endDate);
为了获取 startDate 和 endDate,我使用了这个函数。
public Date getEndOfDay(Date date)
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
public Date getStartOfDay(Date date)
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
【讨论】:
以上是关于根据日期从数据库中获取结果而不考虑时间的主要内容,如果未能解决你的问题,请参考以下文章
如何从 unixtime(integer) 列包含当前日期而不考虑时间的表中选择记录?