在两个日期之间从数据库返回记录

时间:2013-10-07 09:41:32

标签: java sql

我使用Java创建了一个程序,该程序连接到数据库并允许用户提交记录。此记录包括唯一的参考编号和开始日期(变量:StartedDate)。

我希望用户能够搜索两个日期(当月的第一天和今天的日期)之间提交的案例数量。

到目前为止,我有SQL查询

select * from cases where StartDate>'***' and Date<'****'

在Java中,它将是

select * from cases where StartedDate>'1stMONTHDATE' and Date<'TODAYSDATE'

我的第一个问题是 - 在数据库中,没有一个名为“日期”的字段,因为这必须每天更改。我如何将其引用为Java自动生成的日期?

另外,我如何实现Count()方法返回返回的记录数的int?

3 个答案:

答案 0 :(得分:3)

SELECT * FROM cases WHERE StartedDate BETWEEN :startDate AND :endDate

在JPQL中:

public List<Cases> findAllEvents(Date startDate, Date endDate) {    
  List<Cases> allCases = entityManager.createQuery("SELECT * FROM cases WHERE StartedDate BETWEEN :startDate AND :endDate")  
  .setParameter("startDate", startDate, TemporalType.DATE)  
  .setParameter("endDate", endDate, TemporalType.DATE)  
  .getResultList();
        return allCases ;  
    }

答案 1 :(得分:0)

我认为查询中的“日期”是指结束日期。 如果是这样,您可以使用以下两种方法之一计算结束日期

  1. 使用Calender类的java并将结束日期作为参数传递给查询
  2. 在sql中通过修改查询
  3. ,因为结束日期是从开始日期开始的一个月。这是特定于数据库的。这将在Postgres中有效。根据您用于获取结束日期的数据库查找正确的语法

    select * from cases where StartedDate>'1stMONTHDATE' and ('StartedDate' + INTERVAL '1 MONTH')<'TODAYSDATE'.
    

    关于count() - 一个简单的SELECT Count(*)将为您提供查询返回的行数

答案 2 :(得分:0)

如果您使用MSSQL且日期值为String,则可以使用以下查询:

SELECT c FROM cases c where CONVERT(VARCHAR(10),StartDate,121) between :startDate AND :endDate 

我在mssql server

的应用程序中使用此查询