广告
返回顶部
首页 > 资讯 > 数据库 >关于mysql时间区间问题浅析
  • 298
分享到

关于mysql时间区间问题浅析

2024-04-02 19:04:59 298人浏览 薄情痞子
摘要

目录一、between……and……二、<和>问题三、在java代码中拼接四、转变格式查询附:My

一、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日期属性}

附:mysql如何实现指定时间区间的所有日期

Mysql没有递归查询,是如何实现指定日期查询的:mysql.help_topic 这时候就可以使用mysql自带的这个表来实现。(算是取巧的方法,暂时没找到更好的方法)

SELECT DATE_FORMAT( date_add(concat('2019-01-01'), interval(help_topic_id) DAY),'%Y-%m-%d') DT 
        FROM mysql.help_topic
        WHERE help_topic_id  <=  timestampdiff(DAY,concat('2019-01-01'),concat('2019-12-01'))

总结

到此这篇关于mysql时间区间问题的文章就介绍到这了,更多相关mysql时间区间问题内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 关于mysql时间区间问题浅析

本文链接: https://www.lsjlt.com/news/146612.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作