1.在查询中,经常会遇到时间范围内查询数据
(1) 首先想到的是
between
SELECT*
FROM table
WHERE table.time BETWEEN '2019-08-01' AND '2019-08-10'
(2) 另一种
< , > , = , >= , <=
mybatis中不可以直接使用
<= ,>=
或者
<![CDATA[ <= ]]> , <![CDATA[ >= ]]>
2.在查询中,时间查询格式为yyyy-MM-dd,但是数据库中是yyyy-MM-dd hh:mm:ss
(1) TO_DAYS( )
MySql:
WHERE TO_DAYS(oi.`create_time`) >= TO_DAYS('yyyy-MM-dd hh:mm:ss')
AND TO_DAYS(oi.`create_time`) <= TO_DAYS('yyyy-MM-dd hh:mm:ss')
MyBatis中:
<if test="beginTime != null">
AND TO_DAYS(oi.`create_time`) >= TO_DAYS(#{beginTime})
</if>
<if test="endTime != null">
AND TO_DAYS(oi.`create_time`) <= TO_DAYS(#{endTime,jdbcType=VARCHAR})
</if>
(2) <![CDATA[ ]]>
MyBatis中:
<if test="beginTime != null">
<![CDATA[AND (DATE_FORMAT(oi.`create_time`, '%Y-%m-%d') >= DATE_FORMAT( #{beginTime}, '%Y-%m-%d'))]]>
</if>
<if test="endTime != null">
<![CDATA[AND (DATE_FORMAT(oi.`create_time`, '%Y-%m-%d') <= DATE_FORMAT( #{endTime}, '%Y-%m-%d'))]]>
</if>
**3.计算环比,同比
这种用左连接比较好
(1) 计算同比
年同比,所以只关心YYYY
//上一年
YEAR ( od.create_time ) = YEAR ( date_sub( #{queryYear}, INTERVAL 1 YEAR ) )
(2) 月环比,只关心YYYY-MM
DATE_FORMAT( od.create_time, '%Y-%M' ) = DATE_FORMAT( date_sub( #{queryMonth}, INTERVAL 1 MONTH ),
'%Y-%M' )
(3) 月同比,关心YYYY-MM
DATE_FORMAT( od.create_time, '%Y-%M' ) = DATE_FORMAT( date_sub( #{queryMonth}, INTERVAL 1 YEAR ),
'%Y-%M' )
(4)某段时间内环比(同一个月范围内)
TO_DAYS( od.create_time ) <![CDATA[ >= ]]> TO_DAYS( date_sub( #{startDate}, INTERVAL 1 MONTH ) )
(5)某段时间内同比(同一个月范围内)
TO_DAYS( od.create_time ) <![CDATA[ >= ]]> TO_DAYS( date_sub( #{startDate} , INTERVAL 1 YEAR ) )
.当数据为null时,让其显示“某些字符”
**IFNULL("字段", "要显示的内容")**
IFNULL(mi.company_name, "平台")