MySql关于时间查询的技巧

本篇文章讲述一个MySql关于时间查询的技巧。

场景:

需要通过时间段搜索,比如我的页面是element-ui的时间选择器选择查询一个月的时间,也就是我要条件搜索这一个月的数据。

这个时候有一个比较简单的方法,不用知道这个月开始的时间和结束的时间,如果按照以前的方法肯定是 between 开始时间 and 结束时间,但是我们选择的是一个月份,所以要知道结束时间是很麻烦的。

因此,这里的方法就是把前端得到的时间转换成"yyyy-MM",也就是我选择2018年6月,就把这个时间转换成"2018-06",然后把这个时间传给mysql就能识别,在mybatis加条件的时候:create_time like concat(#{chooseMonth},'%') 这样的话就相当于是一个模糊查询,时间的开始是2018-06的时间都会查出来,就达到了查询一个月的数据的效果,也不用那么繁琐。

后台service代码:

public PageInfo<SysFileVO> queryFileList(SysUser sysUser,Map<String, Object> map){
    Integer currentPage = Integer.valueOf(map.get("currentPage").toString());
    Integer pageSize = Integer.valueOf(map.get("pageSize").toString());
    PageHelper.startPage(currentPage, pageSize);
    map.put("regId",sysUser.getRegId());
    Date date = new Date();
    String createTime = "";
    if (!StringUtil.isEmpty((String) map.get("currentMonth"))
            && !"1970".equals(((String) map.get("currentMonth")).substring(0,4))){
        String time = (String) map.get("currentMonth");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        try {
            date = sdf.parse(time);
            createTime = sdf.format(date);
            map.put("createTime",createTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
    List<SysFileVO> list = sysFileMapper.queryFileList(map);
    return new PageInfo(list);
}

主要看我标红的代码:currentMonth是从map中取出来的,所以要先转换成字符串,再把字符串转化成时间,再转化成我们需要的字符串。

<select id="queryFileList" parameterType="map" resultMap="FileVOResultMap">
  SELECT
      sf.file_id,
      sf.reg_id,
      sf.create_time,
      sf.organization,
      sf.create_user,
      sf.updownload,
      sa.attach_id,
      sa.file_real_name,
      sa.file_show_name,
      sa.file_path,
      sa.file_type
  FROM
      sys_file sf
  LEFT JOIN sys_attach sa
  ON sa.business_id = sf.file_id
  WHERE sf.updownload = #{updownload}
  AND sf.reg_id = #{regId}
  AND sf.file_state = 0
  AND sa.file_state = 0
  <if test="createTime!=null and createTime!=''">
      AND sf.create_time like concat(#{createTime},'%')
  </if>
  ORDER BY sf.create_time DESC
</select>

这里sql一定要注意 like后面一定要用concat函数去拼接,不能直接#{createTime}+"%"来拼接,这样mysql好像不认识(具体可以试一下,本人没试),

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值