在业务环境中,总是想要筛选出不同时间条件下的数据,例如我只想查询当天数据,当月数据或者本年数据。于是就想通过MySQL自带的几个时间函数进行简单的实现。
一、SQL语句实现
- Talk is cheap,show me the code.
查询当天的数据的两种方式:
1、
SELECT
*
FROM
cars_location
WHERE
YEAR ( create_time ) = YEAR ( now( ) )
AND MONTH ( create_time ) = MONTH ( now( ) )
AND DAY ( create_time ) = DAY ( now( ) )
2、
SELECT
*
FROM
cars_location
WHERE
date( create_time ) = curdate( );
查询本年:
SELECT
*
FROM
`cars_location`
WHERE
YEAR ( create_time ) = YEAR ( now( ) )
查询本月:
SELECT
*
FROM
`cars_location`
WHERE
YEAR ( create_time ) = YEAR ( now( ) )
AND MONTH ( create_time ) = MONTH ( now( ) )
二、结合Mybatis实现
首先我们来了解,假设我有一个dateFlag属性,专门用来判断前端传过来的查询时间条件,并且规定dateFlag='day’表示查询当天数据,dateFlag='month’表示查询当月数据,dateFlag='year’表示查询当年数据,以下就是mybatis的实现片段可供参考,其中需要注意在if test中的==条件后的参数需要加单引号。
<if test="dateFlag != null and dateFlag == 'day'">
AND YEAR ( create_time ) = YEAR ( now( ) )
AND MONTH ( create_time ) = MONTH ( now( ) )
AND DAY ( create_time ) = DAY ( now( ) )
</if>
<if test="dateFlag != null and dateFlag == 'month'">
AND YEAR ( create_time ) = YEAR ( now( ) )
AND MONTH ( create_time ) = MONTH ( now( ) )
</if>
<if test="dateFlag != null and dateFlag == 'year'">
AND YEAR ( create_time ) = YEAR ( now( ) )
</if>
三、总结
通过了解MySQL的时间函数以及集合Mybatis的写法,成功对接后台实现根据dateFlag查询当日、当月或者本年的数据。题外话:我们从后台返回的时间戳总是毫秒数,如果我们要转换成"yyyy-MM-dd HH:mm:ss"的格式,那么可以参考以下的js函数进行转换:
function timeFormat(data){
var datatime='';
if( data != null|| data!=undefined){
timestampToTime(data);
function timestampToTime(timestamp) {
var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
var M = ( date.getMonth() + 1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
var D;
if( date.getDate() < 10 ){
D = "0"+date.getDate()+" ";
}else{
D = date.getDate()+" ";
}
var h = ( date.getHours() < 10 ? '0'+(date.getHours()) : date.getHours() ) + ':';
var m = ( date.getMinutes() < 10 ? '0'+(date.getMinutes() ) : date.getMinutes() ) + ':';
var s = ( date.getSeconds() < 10 ? '0'+(date.getSeconds() ) : date.getSeconds() );
datatime = Y+M+D+h+m+s;
return Y+M+D+h+m+s;
}
return datatime;
}
}
(PS:我在去年写的一篇关于油猴脚本的获取与使用博客在很长一段时间里都受到了很多朋友的关注,并在评论中表达了感谢。该博文是在我初次使用油猴脚本后抑制不住想要安利给大家使用的心情下撰写的,却意外的受到了好评,对大家产生了帮助让我觉得很开心。于是就更加坚定了自己坚持写博客的决心,希望自己写的技术博文也能够受到大家的关注。总之,共勉。)
参考资料: