前言

今天又遇到很坑的问题了,因为外国友人每一周的起始日期是周日,跟我们的不一样,我们每一周的起始日期是星期一,这样导致我要用mysql统计一周的数据的时候,对于我们来说,查询的记录包括:上周日的记录+本周的数据到星期六 这样的数据,这就不符合我们的要求,把上周日的数据也统计进来了。

所以也是找了好久的资料,才终于解决

一、问题发现:

默认我一开始写的测试查询本周上周数据的语句是这样的:

#查询本周
select A.sushenum,cast(A.dfdata as DECIMAL (10,3)) dfdatanumber,A.dfdata,cast(A.dfmoney as DECIMAL (10,3)) dfmoneynumber,A.dfmoney,DATE_FORMAT(A.lrrq,'%Y-%m-%d %H:%i:%S') lrrqfrom tablename_test Awhere YEARWEEK(date_format(A.lrrq,'%Y-%m-%d')) = YEARWEEK(now())and A.sushenum = '1309'#查询上周
select A.sushenum,cast(A.dfdata as DECIMAL (10,3)) dfdatanumber,A.dfdata,cast(A.dfmoney as DECIMAL (10,3)) dfmoneynumber,A.dfmoney,DATE_FORMAT(A.lrrq,'%Y-%m-%d %H:%i:%S') lrrqfrom tablename_test Awhere YEARWEEK(date_format(A.lrrq,'%Y-%m-%d')) = YEARWEEK(now())-1and A.sushenum = '1309'

顺便提一下,查询本周和上周的区别,大家可以对照上面两条sql语句,区别就是

本周是 YEARWEEK(now())-0

上周是 YEARWEEK(now())-1

上上周也就是 YEARWEEK(now())-2,以此类推。

查询到的记录是

大家可以很明显的看到2018年12月2日的记录也查出来了,12月2日是星期日。为了让大家更直观的看,我把12月的月份截出来

所以这样查询出来的记录,对于我们来说是有问题的。接下来教大家解决办法。

二、问题解决

可以清楚的知道,mysql查询本周,上周用到的是YEARWEEK()这个函数,具体使用教程可以看链接:http://www.runoob.com/mysql/mysql-functions.html

从上面YEARWEEK()函数API可以知道,还有mode这个字段是可以自己设置一周是从星期几开始的,不写的话默认是星期日为一周的开始日期,这里为了适用我们的系统,将星期一设置为一周的开始日期,我们就给mode设为1就可以啦。

修改后:

#查询本周
select A.sushenum,cast(A.dfdata as DECIMAL (10,3)) dfdatanumber,A.dfdata,cast(A.dfmoney as DECIMAL (10,3)) dfmoneynumber,A.dfmoney,DATE_FORMAT(A.lrrq,'%Y-%m-%d %H:%i:%S') lrrqfrom tablename_test Awhere YEARWEEK(date_format(A.lrrq,'%Y-%m-%d'),1) = YEARWEEK(now(),1)and A.sushenum = '1309'#查询上周
select A.sushenum,cast(A.dfdata as DECIMAL (10,3)) dfdatanumber,A.dfdata,cast(A.dfmoney as DECIMAL (10,3)) dfmoneynumber,A.dfmoney,DATE_FORMAT(A.lrrq,'%Y-%m-%d %H:%i:%S') lrrqfrom tablename_test Awhere YEARWEEK(date_format(A.lrrq,'%Y-%m-%d'),1) = YEARWEEK(now(),1)-1and A.sushenum = '1309'

修改后查询到的记录是:

大家可以对比上面的查询记录的图片,可以看到12月2日的这条记录没有了,而是12月3日的这条记录了,至此解决。

三、总结

所以,大家在使用sql函数的时候,一定要看看这个函数的API,这样才能将这个函数使用的融会贯通,比别人更加的掌握。

所以这里考大家一个问题,oracle怎么查询本周、上周的记录呢?

参考文章:

https://blog.csdn.net/qq_21995733/article/details/78989074

https://www.cnblogs.com/xgwtzg/p/6140022.html

感谢原作者的分享,让技术人能够更快的解决问题


2018年12月31日遇到了问题

今天在用自己测试程序的时候,发现数据都查询不到了,于是赶紧进行排查。发现了一个很大的问题。

什么问题呢,就是当这周是跨了年的时候,mysql用yearweek()会出问题,导致查询不到上周的数据。

上面我也讲到了yearweek()函数的用法。

yearweek(date, mode)会返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一

大家可以看到,在12月31号的时候,返回的是201901(表示2019年的第一周)

原因就是本周跨年了,所以显示的是2019年的第一周。

但是上文中讲到我去查询上周的时候,用的是YEARWEEK(now())-1

可以看到变成的是201900,但是我要查询上周的数据,也就是12月24日-30日,

yearweek()返回的值是201851,所以在使用

#查询上周
select A.sushenum,cast(A.dfdata as DECIMAL (10,3)) dfdatanumber,A.dfdata,cast(A.dfmoney as DECIMAL (10,3)) dfmoneynumber,A.dfmoney,DATE_FORMAT(A.lrrq,'%Y-%m-%d %H:%i:%S') lrrqfrom tablename_test Awhere YEARWEEK(date_format(A.lrrq,'%Y-%m-%d'),1) = YEARWEEK(now(),1)-1and A.sushenum = '1309

YEARWEEK(date_format(A.lrrq,'%Y-%m-%d'),1) =YEARWEEK(now(),1)-1的时候,这两者左边是2018**,右边是2019**,是永远也不会相等的

这就遇到很大的问题了,导致上周的数据显示没有。

所以我暂时没有想到解决的办法,后续继续研究一下,先把问题放在这里,有哪位大神解决了的或者有解决思路或者方法的,可以在底部留言或者留下文章链接。我想到解决方法后会继续在本文补充。

[已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题相关推荐

  1. MySql查询某个时间段内的数据(前一周、前三个月、前一年等)

    1.使用函数DATE_SUB DATE_SUB函数在当前时间减去一定的时间 DATE_SUB(date,INTERVAL expr unit) date:合法日期,可以是当前时间now() expr: ...

  2. mysql查询5分钟内的数据

    查询sql语句: select * from tb_log where createtime>=DATE_SUB(NOW(),INTERVAL 5 MINUTE); DATE函数扩展: 函数 描 ...

  3. MySQL 查询指定时间范围内的数据

    说明 mysql 比较时间范围可以直接用 >=.<= 等比较运算符,也可以用 between and(两边都包含,都是闭区间):比较运算符更常用,因为 between and 能做的比较运 ...

  4. mysql 近几天内_MYSQL查询一周内的数据(最近7天的)

    select * from wap_content where week(created_at) = week(now) 如果你要严格要求是某一年的,那可以这样 查询一天: select * from ...

  5. mysql查询特定时间数据视频_mysql查询特定时间段内的数据

    参照文章(mysql查询时间段内数据)进行了操作. 先来建表语句: [sql] view plaincopySETFOREIGN_KEY_CHECKS=0;-- ------------------- ...

  6. php按选定日期查询,php mysql查询指定范围内日期

    摘要 腾兴网为您分享:php mysql查询指定范围内日期,掌上新华,掌上公交,学习帮,喜马拉雅等软件知识,以及mts,97漫画网,三菱plc编程软件win10,零点八,2016考研国家线,生化奇兵补 ...

  7. mysql 查询1小时内_mysql查询一个小时之内的数据

    由于项目的需要经常查询一个小时之内的数据,接下来吾爱编程为大家分享一下使用Mysql查询一个小时之内的数据的sql,有需要的小伙伴可以参考一下: 1.方法一: (1).sql写法: SELECT *  ...

  8. 获取当天日期的前一天或前几天,查询一天内的数据

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//① Calendar ca = Calenda ...

  9. php mysql只获取一条数据_php mysql 查询只返回第一条数据

    php mysql 查询只返回第一条数据 $search = mysql_query("select * from `info`"); $search = mysql_fetch_ ...

最新文章

  1. LLVM基础技术图例
  2. Java 中商业运算必备的精确运算类:BigDecimal
  3. 为提高访问速度建立本地文件服务器,html5 Application Cache——加快简历二次访问速度...
  4. 再不用担心DataRow类型转换和空值了(使用扩展方法解决高频问题)
  5. Java08-day08【API(概述、使用)、String-StringBuilder(概述、构造方法、特点、方法)、StringBuilder和String相互转化】
  6. Centos7 更新gcc版本
  7. 手动安装android的sdk
  8. 简单的测试可以防止最严重的故障
  9. Fabric中的Transient Data与Private Data
  10. html多级折叠菜单表单,JS实战篇之收缩菜单表单布局
  11. 上传相关js和jquery对象
  12. [CodeForces - 950D]A Leapfrog in the Array(思维)
  13. 凉凉了,Eureka 宣布闭源,Spring Cloud 何去何从? 1
  14. matlab线检测,车道线检测(matlab)
  15. MPLS virtual private network中MCE介绍
  16. 浅谈前端JavaScript编程风格
  17. android 自定义消息,TUIKit Android自定义消息
  18. EasyExcel筛选和冻结首行
  19. linux添加fuji打印机,Ubuntu16.04下添加打印机FujiXerox CP116w
  20. 如何恢复手动删除的微信聊天记录?2个简单高效方法推荐

热门文章

  1. 真知灼见|客户视图与工作台:金融行业呼叫中心领域驱动设计
  2. idea编译报错:Refer to the generated Javadoc files in ‘..\target\apidocs‘ dir. 解决
  3. 知道创宇CTO杨冀龙:网络安全人才决定行业格局
  4. 数位DP入门笔记(1)HUD-2089
  5. 数据结构、数据、数据元素、数据项的区别
  6. 三种通信方式——单工、半双工和双工通信
  7. mysql 空闲链接超时时间_解决mysql 中共8小时空闲后连接超时的有关问题
  8. 超详细淘宝小程序的接入开发步骤
  9. python自学成才之路 miniconda创建虚拟环境
  10. 在VS Code中t把分支写的代码合并到master中并提交到远程仓库github上