目录
一、between……and……二、<和>问题三、在java代码中拼接四、转变格式查询附:Mysql如何实现指定时间区间的所有日期总结一、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一样的用法
AND 开始时间字段名 >= #{前台传的值} AND 结束时间字段名 <= DATE_ADD(#{前台传的值},INTERVAL 1 DAY)
三、在java代码中拼接
在代码中拼接,用上面的<和>查询,简单粗暴,只是记录一下实现方法
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") >= #{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时间区间问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?