<if test="param.checkTime != null and param.checkTime != ''">
and year(t2.checkout_time) = #{param.checkTime}
</if>
year()函数接收date类型,返回一个年份。还有month()函数,一个用法
mysql> SELECT YEAR('2018-01-01');
+--------------------+
| YEAR('2018-01-01') |
+--------------------+
| 2018 |
+--------------------+
1 row in set
大于。小于的, 需要转义。
<if test="param.checkAge0 != null and param.checkAge0 != ''">
and t2.age >= #{param.checkAge0}
</if>
<if test="param.checkAge1 != null and param.checkAge1 != ''">
and t2.age <= #{param.checkAge1}
</if>
或者使用 大于等于<![CDATA[ >= ]]> 小于等于<![CDATA[ <= ]]>
create_time <![CDATA[ >= ]]> #{startTime} and create_time <![CDATA[ <= ]]> #{endTime}
日期类型格式化
<if test="param.today != null and param.today != ''">
AND date_format(t1.createtime,'%Y-%m-%d') = #{param.today}
</if>
类型转换
Cast()函数就能搞定。其语法为:Cast(字段名 as 转换的类型 ),其中类型可以为:
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和时间型
DECIMAL float型
SIGNED int
TIME 时间型
UNSIGNED 浮点数
AND (concat(t1.result,'.00') >= #{param.startValue}
<if test="param.startIntValue != null and param.startIntValue != ''">
or CAST(t1.result AS UNSIGNED) > #{param.startIntValue}
</if>
字符串 拼接CONCAT(), 前端传来参数 year=2018年。
<if test="checkTime != null and checkTime != ''">
and CONCAT(year(a.check_time),'年') = #{year}
</if>