mysql中如何查看某个日期所在的周一是几号?某个日期所在的一周开始时间是几号?
需求描述:
在编写SQL的时候,有这么个需求,就是要查出来某个日期所在的周一是几号,进行了测试,在此进行记录下.
测试过程:
议题:查看某个日期所在的周一是几号
分析:如果某个日期是周一,那么加上整数周之后的日期还是周一,所以,想要查看某个日期所在的周一是几号,就要知道这个日期和某个周一之间相差的整数周就可以了.
1.首先找到某个星期一,以1970.01.05这个日期为例.查看这个日期是周几?
mysql> select date_format('1970-01-05','%W');
+--------------------------------+
| date_format('1970-01-05','%W') |
+--------------------------------+
| Monday |
+--------------------------------+
1 row in set (0.00 sec)
备注:通过查看的结果,可以知道,1970年1月5号是周一,所以使用这个日期就能知道某个日期所在的周一是几号了.
2.查看这个日期和某个日期之间差多少天
mysql> select datediff('2018-06-26','1970-01-05');
+-------------------------------------+
| datediff('2018-06-26','1970-01-05') |
+-------------------------------------+
| 17704 |
+-------------------------------------+
1 row in set (0.00 sec)
备注:两个日期相差17704天.
3.查看两个日期之间相差多少周
mysql> select datediff('2018-06-26','1970-01-05') / 7;
+-----------------------------------------+
| datediff('2018-06-26','1970-01-05') / 7 |
+-----------------------------------------+
| 2529.1429 |
+-----------------------------------------+
1 row in set (0.00 sec)
备注:两个日期相差2529.1429周即整数周是2529周.
3.1计算整数值,使用floor函数计算小于等于这个数的最大整数
mysql> select floor(datediff('2018-06-26','1970-01-05') / 7);
+------------------------------------------------+
| floor(datediff('2018-06-26','1970-01-05') / 7) |
+------------------------------------------------+
| 2529 |
+------------------------------------------------+
1 row in set (0.00 sec)
4.计算2018年6月26日这个日期的周一是几号
mysql> select adddate('1970-01-05',interval floor(datediff('2018-06-26','1970-01-05') / 7)*7 day);
+-------------------------------------------------------------------------------------+
| adddate('1970-01-05',interval floor(datediff('2018-06-26','1970-01-05') / 7)*7 day) |
+-------------------------------------------------------------------------------------+
| 2018-06-25 |
+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
备注:所以,1970年1月5号这个周一加上7*2529天,就是2018年6月26号所在的周一.
5.计算2018年6月25日这个日期的周一是几号的过程
mysql> select datediff('2018-06-25','1970-01-05') / 7;
+-----------------------------------------+
| datediff('2018-06-25','1970-01-05') / 7 |
+-----------------------------------------+
| 2529.0000 |
+-----------------------------------------+
1 row in set (0.00 sec)
mysql> select floor(datediff('2018-06-25','1970-01-05') / 7);
+------------------------------------------------+
| floor(datediff('2018-06-25','1970-01-05') / 7) |
+------------------------------------------------+
| 2529 |
+------------------------------------------------+
1 row in set (0.00 sec)
mysql> select adddate('1970-01-05',interval floor(datediff('2018-06-25','1970-01-05') / 7)*7 day);
+-------------------------------------------------------------------------------------+
| adddate('1970-01-05',interval floor(datediff('2018-06-25','1970-01-05') / 7)*7 day) |
+-------------------------------------------------------------------------------------+
| 2018-06-25 |
+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
备注:两个日期相差正好是2529周,所以呢,就使用1970年1月5号这个日期加上7*2529天就是周一了.
6.计算2018年6月24日这个日期所在的周一是几号
mysql> select datediff('2018-06-24','1970-01-05') / 7;
+-----------------------------------------+
| datediff('2018-06-24','1970-01-05') / 7 |
+-----------------------------------------+
| 2528.8571 |
+-----------------------------------------+
1 row in set (0.00 sec)
mysql> select floor(datediff('2018-06-24','1970-01-05') / 7);
+------------------------------------------------+
| floor(datediff('2018-06-24','1970-01-05') / 7) |
+------------------------------------------------+
| 2528 |
+------------------------------------------------+
1 row in set (0.00 sec)
mysql> select adddate('1970-01-05',interval floor(datediff('2018-06-24','1970-01-05') / 7)*7 day);
+-------------------------------------------------------------------------------------+
| adddate('1970-01-05',interval floor(datediff('2018-06-24','1970-01-05') / 7)*7 day) |
+-------------------------------------------------------------------------------------+
| 2018-06-18 |
+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
小结:
简单来说,就是某个日期和某个周一之间差多少整数周,相加就是某个日期所在的周一了
文档创建时间:2018年6月26日11:36:48
mysql中如何查看某个日期所在的周一是几号?某个日期所在的一周开始时间是几号?的更多相关文章
- mysql中怎样查看和删除唯一索引
mysql中怎样查看和删除唯一索引. 查看唯一索引: show index from mytable;//mytable 是表名 查询结果例如以下: 查询到唯一索引后,怎样删除唯一索引呢,使用例如以下 ...
- My SQL中show命令--MySQL中帮助查看
My SQL中show命令--MySQL中帮助查看 学习了:http://hahaxiao.techweb.com.cn/archives/477.html 在mysql命令界面内,输入help或者? ...
- JAVA获取当前日期所在的周一到周日的所有日期集合
/** * 获取当前日期所在的周一到周日的所有日期集合 * @return */ public static List<Date> getWeekDateList() { Calendar ...
- MySQL中如何查看“慢查询”,如何分析执行SQL的效率?
一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...
- mysql中,查看当前数据库下所有的基表,不包括视图
环境描述: mysql版本:5.5.57-log 操作系统版本:Red Hat Enterprise Linux Server release 6.6 (Santiago) 需求描述: 查看当前使用的 ...
- mysql中explain查看sql语句索引使用情况
explain + sql: mysql> explain select * from user; +----+-------------+-------+------+------------ ...
- Mysql中如何查看慢查询以及查看线程
一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...
- mysql中如何查看某个数据库或表占用的磁盘空间
查整个库的状态:select concat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size, concat(tru ...
- MySQL中各种数据类型的长度及在开发中如何选择
接触MySQL这个数据库大概快要两年了,不过由于没有特别深入系统的去学习,大多也是停留在一知半解的状态.今天在工作中刚好碰到了表设计的问题,顺便写篇博客,把MySQL中数据类型和字段类型选择这方面给弄 ...
随机推荐
- centosmini7安装GNOME
1.在命令行下输入下面的命令来安装 Gnome 包 #:$sudo yum groupinstall "GNOME Desktop" "Graphical Admini ...
- c# 反射取其他项目的资源文件
反射获取其他项目里面的资源文件. dll或exe里面 try { System.Reflection.Assembly dll = System.Reflection.Assembly.LoadFil ...
- python里面有人写while 循环用 用while 1 和while True的区别
由于Python2中,True/False不是关键字,因此我们可以对其进行任意的赋值,这就导致程序在每次循环时都需要对True/False的值进行检查:而对于1,则被程序进行了优化,而后不会再进行检查 ...
- AD集成库元件简写中英文对照表
序号 英文简写 元件英文名 元件中文名 1 Res semi Semiconductor Resistor 半导体电阻 2 Cap semi Semiconductor Capacitor 半导体电容 ...
- beansbinding NetBeans IDE 中 Swing数据绑定插件
http://my.oschina.net/u/127459/blog/111486 https://kenai.com/projects/betterbeansbinding/pages/Home ...
- 微信小程序——页面之间传递值
小程序页面传值的方式: 1.正向传值:上一页面 --> 下一页面 url传值 本地储存 全局的app对象 2.反向传值:下一页面 --> 上一页面 本地储存 全局的app对象 先说一下 ...
- 安卓程序代写 网上程序代写[原]Android开发技巧--ListView
1. ListView中元素的排序 ListView中的元素排序, 即将数据源排序即可; 给集合排序的方法 : 调用Collections的sort(list, Comparator)方法, 该方法需 ...
- 【转】使用sonar为你的代码质量保驾护航
一. 简介Sonar是一个用于代码质量管理的开放平台,相信大家都不会陌生.Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具.官方网站https://www.sonarqube.org ...
- 关于Unity中的刚体和碰撞器的相关用法(一)
1.创建一个3D工程 2.构造项目文件目录 3.保存场景为game_scene到文件夹scenes中 4.创建一个Plane平面类型的GameObject节点和一个Sphere球体类型的GameObj ...
- 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页
第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值, ...