在业务环境中,总是想要筛选出不同时间条件下的数据,例如我只想查询当天数据,当月数据或者本年数据。于是就想通过MySQL自带的几个时间函数进行简单的实现。
一、SQL语句实现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;
}
}
|