zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    paip.提高开发效率自动数据库SQL备份
    paip.提升开发效率增量备份项目文件
    paip.提升开发效率使用拼音
    paip.asp vbs代码的排版格式化
    paip.asp vbs的代码折叠代码结构查看
    paip.提升用户体验文件查找
    poj3026
    poj3020
    poj1182
    POJ典型算法例题题号
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/9228330.html
Copyright © 2011-2022 走看看