如何在两个日期框 zk 之间进行过滤

how to make filter between two datebox zk

我有 2 个日期框来制作过滤器。它们的值将决定我查询中的 'from' 和 'to'(我现在使用的是 Oracle),这是代码。

@Listen("onClick=#btnSaveFilter")
public void saveFilter() throws Exception {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

    c_main_filter.detach();
    cc.refreshFilter(""
            +"[Date of Birth] between '" + formatter.format(dbDateBirthFrom.getValue()).toString() + "' "
            + "and '" + formatter.format(dbDateBirthto.getValue()).toString() + "'");

}

当两个日期框都有值时,查询工作。但是当它们没有价值时,查询就没有提供任何数据。

当 datebox 有值时,它给出数据

"[Registration Date] between '2010-09-23' and '2010-09-23' "

当 datebox 没有值时,它不提供任何数据

 "[Registration Date] between '' and '' "

就像另一个过滤器一样,我希望如果该值为 '' 那么所有数据都会出现,但不会出现 :D 哈哈哈。 condition其实不止这个,filter有很多参数其中一个就是这个condition,有的是date格式的,这样的condition会比较多

你知道如何优雅地解决这个问题吗,我一直在考虑使用 'if' 来确定日期框是否有值,然后如果它们都有值,我会将文本附加到查询文本,但后来我发现了另一个问题,如何在查询中添加 'and' 以提供另一个条件

假设我有5个条件那么

"select * from xxxx where 1stcondition and 2ndcondition and
3rdcondition and 4thcondition and 5th condition"

所以当第 5 个条件的日期框没有值时,查询将是这样的错误

"select * from xxxx where 1stcondition and 2ndcondition and 
3rdcondition and 4thcondition and" 

如果我想使用'if',我该如何使用'and'?但如果你有其他选择,那就太好了,因为我不必处理 'if' :D

我不知道你是使用普通的 JDBC 还是像 hibernate 这样的 ORM 框架来查询数据库,但你可以尝试这样的事情:

public void saveFileter(){
 StringBuilder sb = new StringBuilder();
 sb.append("select * from table ");

 if(dbDateBirthFrom.getValue() != null{
   sb.append(determineFilterWord(sb.toString()));
   sb.append("your condition ");
 }

 if(dbDateBirthTo.getValue() != null{
   sb.append(determineFilterWord(sb.toString()));
   sb.append("your condition ")
 }
 session.createQuery(sb.toString()); //if you using hibernate
}

private string determineFilterWord(String query){
  if(query.toLowerCase().indexOf("where") != -1){
     return "and ";
   }else{
     return "where ";
   }
}

你可以用String.isEmpty()来决定是否需要放一个and:

String where = "";

if (from != null && to != null) {
    where += <yourDateCondition>;
}

if (<needToAddSecondCondtion>) {
    if (!where.isEmpty()) {
        where += " and ";
    }
    where += <secondCondition>;
}

// continue with other conditions

String query = "select * from xxxx where " + where;