シナリオ:毎日アクティビティがあるかどうかを確認する必要があり、フロントエンドは時間範囲を示します
コード:
public List<Integer> getTimeRangeCount(String startTIme, String endTime) throws ParseException {
//计算时间差的天数:例如2020-01-01 00:00:00 到2020-01-03 02:00:00计算结果为[2020-01-01,2020-01-02]
int daysBetween = DateUtil.getDaysBetween(startTIme, endTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<String> query = Lists.newArrayList();
query.add(sdf.format(sdf.parse(startTIme)));
for (int i = 0; i < daysBetween; i++) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(sdf.parse(startTIme));
calendar.add(Calendar.DATE, 1);
startTIme = sdf.format(calendar.getTime());
query.add(startTIme);
}
List<Integer> timeRangeCount = activityMapper.getTimeRangeCount(query);
return timeRangeCount;
}
/**
* 查询一个时间段中每天是否有活动
*/
List<Integer> getTimeRangeCount(@Param("someDays") List<String> someDays);
<select id="getTimeRangeCount" resultType="java.lang.Integer">
<foreach collection="someDays" item="someDay" separator="union all">
(select count(1) from `activity` where start_time like concat(#{someDay}, '%'))
</foreach>
</select>