根据日期从数据库中获取结果而不考虑时间

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 &gt;= date AND x &lt; (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) 列包含当前日期而不考虑时间的表中选择记录?

从oracle数据库中获取日期而不从列中获取时间

Presto TIMESTAMP 从 2 天前获取数据而不输入年月日期?

按日期获取匹配结果

如何使用 PHP 查询获取结果之间的日期 [重复]

如何从 BigQuery 获取基于时间的结果?