• 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

  • 相关阅读:
    MVC中的统一验证机制~终极了(自己的改良版)
    基础才是重中之重~类是怎么执行的
    IE和火狐中模仿Click事件及提交到新窗口总结
    基础才是重中之重~你是否真正理解static对象
    VS远程调试(在IIS中打开网站,进入VS中的断点)
    iOS开发复选框类库SSCheckBoxView
    通过修改程序解决Vista/Win7/Win8下应用程序兼容性问题
    读《微软研发:制胜策略》总结(1)
    hdu1081To The Max
    Red hat 5.4 安装Eclipse 出现的问题
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/9228330.html
Copyright © 2020-2023  润新知