一、between……and……

SELECT * FROM 表名 WHERE 开始时间字段名 BETWEEN '2018-09-01' AND '2018-09-14'; 
发现9月14号的数据没有出来,那就证明between……and……是左闭右开,即[a,b),包含a的值,不包含b的值。
将上面代码修改下面的语句即可,将原来的日期加上一天,就行。
select * from 表名 where 字段名 BETWEEN '2018-08-08' and DATE_ADD('2018-09-14',INTERVAL 1 DAY);
这个问题其实代入到数学中很简单。
我测试的时候和同事说没有包含这一天的数据,还争论了半天,其实是因为思维的问题,程序员的思维和正常人的思维是有一定差异的。就像我有时候就会从0开始数东西,到最后发现不对。当然生活中还是要正常,工作中不正常的需求太多了。

二、<和>问题

我的项目用的mybatis,下面就是截取mapper的一部分,其实和上面的between一样的用法

<if test="开始时间字段名 != null and 开始时间字段名 != ''">
   AND 开始时间字段名 &gt;= #{前台传的值}
</if>
<if test="结束时间字段名!= null and 结束时间字段名!= ''">
   AND 结束时间字段名 &lt;= DATE_ADD(#{前台传的值},INTERVAL 1 DAY)
</if>

三、在java代码中拼接

在代码中拼接,用上面的&lt;和&gt;查询,简单粗暴,只是记录一下实现方法

if(StringUtils.isNotEmpty(beginDate)){
  params.put("beginDate",beginDate+" 00:00:00");
}
if(StringUtils.isNotEmpty(endDate)){
  params.put("endDate",endDate + " 23:59:59");
}

四、转变格式查询

问题描述:db存的格式一般是“yyyy-MM-dd HH:mm:ss”,但是前台查询并不会这样精确,往往会传“yyyy-MM-dd”格式的,像上面的拼接就会显得极及的LOW,在XXXMapper.xml的sql语句中完成会很优雅。

AND DATE_FORMAT(存日期的字段, '%Y-%m-%d') &gt;= #{Entity日期属性}
Logo

更多推荐