需求描述:

  在编写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. vbs中的"WScript.Network"[属性与方法]

    属性ComputerName                  计算机名UserDomain                    所属局域网域的域名UserName                 ...

  2. 【oneday_onepage】——China's Internet users grow to 591 million

    July 17, 2013, 6:29 AM — China's Internet populace grew to 591 million by the end of June, as more n ...

  3. python 获取前一天凌晨unix时间

    # -*- coding:utf-8 -*-import time now_time = int(time.time())day_time = now_time - now_time % 86400 ...

  4. js动态加载图片核心代码

    objMapHeart.src = obj.getAttribute("ItemImage"); //==============图片预加载处理================== ...

  5. 自然语言交流系统 phxnet团队 创新实训 项目博客 (三)

    语音转文本部分是调用的科大讯飞的在线语音,它的激发方式是按键,通过按钮触发开启安卓设备的录音,此部分需要在源码中写入关于安卓权限的要求,来调用安卓的录音权限,当按钮被激发,则开始进入语音录制阶段,将麦 ...

  6. android 系统广播

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00012731 String ADD_SHORTCUT_ ...

  7. PDFSharp生成PDF.

    在上面用OpenXML生成word后,原来利用Word2010里的导出成PDF功能就不能用. 然后找开源组件生成PDF,最开始用的是iTextSharp,做完导出报表了才发现,这个开源协议用的是AGP ...

  8. Linux系统中如何校验SHA1和MD5?

    来自:系统之家:http://www.xitongzhijia.net/xtjc/20160316/69125.html 我们在网络上下载或在U盘中复制的文件正常来说和源文件是一样的,但有时在下载或拷 ...

  9. MCMC采样理论的一点知识

    看了好多相关的知识,大致了解了一下马尔可夫链-蒙特卡罗采样理论,有必要记来下来. 蒙特卡罗积分:(来自:http://blog.csdn.net/itplus/article/details/1916 ...

  10. c#中的对象生命周期

    无论是指类型的变量或是类类型的变量,其存储单元都是在栈中分配的,唯一不同的是类类型的变量实际上存储的是该类对象的指针,相当于vc6中的CType*,只是在.net平台的语言中将指针的概念屏蔽掉了.我们 ...