Mybatis查询时间字段位于时间区间之内

需求

查询某条数据的创建时间位于AB两个时间节点之内的情况。
例如,一条审批,发起的时间是2012-05-05,现在需要查询在2012-05-01和2012-05-10时间段内发起的流程。

代码

SELECT
	*
FROM
	process_positive
WHERE
	apply_time >= DATE_FORMAT("2012-05-01", '%Y-%m-%d')
AND TO_DAYS(apply_time) <= TO_DAYS(
	DATE_FORMAT("2012-05-10", '%Y-%m-%d')
)

其中的 apply_time字段即是数据库中的保存字段。
这种查询可以查询到同一天内的数据

SELECT
	*
FROM
	process_positive
WHERE
	apply_time >= DATE_FORMAT("2012-5-1", '%Y-%m-%d')
AND TO_DAYS(apply_time) <= TO_DAYS(
	DATE_FORMAT("2012-5-1", '%Y-%m-%d')
)

这样也可以查出当天的数据。

解析

查询中使用了Mysql中两个函数

DATE_FORMAT("2012-5-1", '%Y-%m-%d')

DATE_FORMAT 这个函数用来格式化时间,将传输的时间数据格式化为yyyy-mm-dd类型

TO_DAYS(apply_time)

TO_DAYS 这个函数的用法是 返回从0年开始一直到apply_time之间的天数

扩展

扩展到Mybatis中使用

<select id="findWorkListByIdList" resultMap="WorkRM">
		SELECT * FROM process_positive where 
				W.CREATE_TIME >= DATE_FORMAT(#{param.startTime}, '%Y-%m-%d')
				AND TO_DAYS(process_positive.apply_time) <= TO_DAYS(DATE_FORMAT(#{param.endTime}, '%Y-%m-%d'))
</select>

mapper层,传输的数据为map

List<Work> findWorkListByIdList(@Param("param") Map<String, Object> param);

service层:

public PageInfo<Work> findWorkListByIdList() {
		Map<String,Object> param= new HashMap<>();
		param.put("startTime","2012-05-01");
		param.put("endTime","2012-05-05");
		List<Work> list = workMapper.findWorkListByIdList(param);
		return new PageInfo<>(list);
	}

controller层就不写了,map集合中的数据可以通过前台传输。

发布了11 篇原创文章 · 获赞 12 · 访问量 4122

猜你喜欢

转载自blog.csdn.net/qq_38991369/article/details/95641915