如何在两个日期框 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;
我有 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;