需求描述:

  在编写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中如何查看某个日期所在的周一是几号?某个日期所在的一周开始时间是几号?的更多相关文章

  1. mysql中怎样查看和删除唯一索引

    mysql中怎样查看和删除唯一索引. 查看唯一索引: show index from mytable;//mytable 是表名 查询结果例如以下: 查询到唯一索引后,怎样删除唯一索引呢,使用例如以下 ...

  2. My SQL中show命令--MySQL中帮助查看

    My SQL中show命令--MySQL中帮助查看 学习了:http://hahaxiao.techweb.com.cn/archives/477.html 在mysql命令界面内,输入help或者? ...

  3. JAVA获取当前日期所在的周一到周日的所有日期集合

    /** * 获取当前日期所在的周一到周日的所有日期集合 * @return */ public static List<Date> getWeekDateList() { Calendar ...

  4. MySQL中如何查看“慢查询”,如何分析执行SQL的效率?

    一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...

  5. mysql中,查看当前数据库下所有的基表,不包括视图

    环境描述: mysql版本:5.5.57-log 操作系统版本:Red Hat Enterprise Linux Server release 6.6 (Santiago) 需求描述: 查看当前使用的 ...

  6. mysql中explain查看sql语句索引使用情况

    explain + sql: mysql> explain select * from user; +----+-------------+-------+------+------------ ...

  7. Mysql中如何查看慢查询以及查看线程

    一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...

  8. mysql中如何查看某个数据库或表占用的磁盘空间

    查整个库的状态:select concat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size,          concat(tru ...

  9. MySQL中各种数据类型的长度及在开发中如何选择

    接触MySQL这个数据库大概快要两年了,不过由于没有特别深入系统的去学习,大多也是停留在一知半解的状态.今天在工作中刚好碰到了表设计的问题,顺便写篇博客,把MySQL中数据类型和字段类型选择这方面给弄 ...

随机推荐

  1. Spring高级装配(二) 条件化的bean

    如果你希望一个bean在特定的条件下才会出现: 应用的类路径下包含特定的库时才创建 只有当某个特定的bean也声明之后才会创建 某个特定的环境变量设定之后才创建某个bean 在Spring 4之前,很 ...

  2. 正则表达式的使用(C#)

    1, C#中与正则表达式相关类. C#中与正则表达式相关类的几个常用类是Regex,Match,Group,Captrue,RegexOption首先我们看看这几个类的类图关系,如何你有正则表达式基础 ...

  3. webbrowser获取无ID无Name控件并模拟点击

    常见的获取控件并点击(自动登录): var txtUserID = wbsTask.Document.All["userName"]; var txtPsd = wbsTask.D ...

  4. 全国地区的省份、城市、区县 最新Sql脚本

    IF (EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_Province]') AND type =' ...

  5. Entity Framework应用:EntityFramework DataBase First模式

    在这篇文章中讲解如何使用EF的DbFirst模式实现数据的增删改查 一.新建控制台应用程序,然后右键->添加新建项,选择数据里面的实体数据模型: 然后点击添加 二.选择来自数据库的EF设计器,并 ...

  6. h5预加载代码

    预加载 <!--预加载--> <div class="preload"> <div class="prezoom"> < ...

  7. 关于jquery版本冲突问题

    今天做项目时,碰到一个问题,纠结了好几个小时.我需要引入jquery-1.9.1.js来满足我引入的别的js文件,但同时,我也需要引入jquery.js,这个是必须要引入的.而这两个不能只引入一个,同 ...

  8. JSP之response对象使用

    1.使用response对象实现重定向 response.sendRedirect("http://www.cnblogs.com"); 2.使用response对象刷新页面 每隔 ...

  9. VMWare Workstation虚拟机网卡工作模式及配置方法

    打开VMware→虚拟机→设置.如下图 一. 桥接模式(Bridge) 可将虚拟系统IP与本地系统设在同一网段,此时虚拟机相当于一台网络中与本机公用一个HUB的独立设备,网络中其他机器与虚拟机器.本地 ...

  10. 如何将Mac系统OS X Yosemite装到外部磁盘?(转)

    有Mac用户想了解是否可以将 OS X Yosemite 装到替代的外部磁盘,答案是肯定的,有需求的用户,可以按照本篇教程逐步进行. 前面我已经写过一篇文章介绍了如何安装 OS X Yosemite ...