在Java web页面开发中经常遇到检索条件包含一个开始日期、终止日期,输入后,查询符合该日期范围内的记录。对于这样的需求我们要了解清楚客户到底想要检索出什么样的数据。如果检出的数据包含了以下几种情况,那么就基本能够满足绝大多数需求:
1、表中数据的开始日、终止日完全落在检索条件范围内;
2、表中的数据与检索条件范围有交集;
3、表中的数据完全包含了检索条件范围;
4、表中数据的日期范围完全落在检索条件范围之内。
一般来说客户需要的数据可能是以上4中情况中的任何一种之一,都需要检索出来。符合以上4中case的SQL文如下:
//委托时间开始、委托时间结束都不为空
sql.append(" and (to_char(b.start_Time,'YYYYMMDD') between :startTime and :endTime");
sql.append(" or to_char(b.end_Time,'YYYYMMDD') between :startTime and :endTime)");
//委托时间开始不空、结束时间为空
if(!StringUtil.isEmpty(strTmp_1) && StringUtil.isEmpty(strTmp_2)){
sql.append(" and to_char(b.start_Time,'YYYYMMDD') >=:startTime ");
}
//委托时间开始空、结束时间为不空
if(StringUtil.isEmpty(strTmp_1) && !StringUtil.isEmpty(strTmp_2)){
sql.append(" and to_char(b.end_Time,'YYYYMMDD') <=:endTime ");}
这样就包含了以上所有情况。