mysql

select y.first_monday,CASE MONTH(ADDDATE(y.first_monday,28))
when mth then ADDDATE(y.first_monday,28)
else ADDDATE(y.first_monday,21) end last_monday
from(
select case sign(DAYOFWEEK(x.dy)-2)
when 0 then x.dy
when -1 then ADDDATE(x.dy,ABS(DAYOFWEEK(x.dy)-2))
when 1 then ADDDATE(x.dy,(7-(DAYOFWEEK(x.dy)-2))) END first_monday, mth
from(
select DATE_ADD(CURRENT_DATE,INTERVAL -DAY(CURRENT_DATE)+1 DAY) dy,MONTH(CURRENT_DATE) mth
from T1
) x
) y

解析:

在前一章中介绍了:

select DATE_ADD(CURRENT_DATE,INTERVAL -DAY(CURRENT_DATE)+1 DAY) dy,MONTH(CURRENT_DATE) mth
from T1

为获取这个月的第一天。

case sign(DAYOFWEEK(x.dy)-2)

when 0 then x.dy

when -1 then ADDDATE(x.dy,ABS(DAYOFWEEK(x.dy)-2))

when 1 then ADDDATE(x.dy,(7-(DAYOFWEEK(x.dy)-2))) END first_monday, mth

因为DAYOFWEEK 可以获取星期数值,星期六为7,星期天为1 ,星期1为2。

这里判断第一天是不是星期一,如果是星期天,也就是-1,那么下一天就是星期一。

如果是星期二到星期六,那么就算,下一个星期一是多少。

select y.first_monday,CASE MONTH(ADDDATE(y.first_monday,28))
when mth then ADDDATE(y.first_monday,28)
else ADDDATE(y.first_monday,21) end last_monday

这一段是我们已经获取了第一个星期的星期一。

那么最后一个星期一,要不就是加28,4个星期,要不就是加21,3个星期。

sql server

with x(dy,mth,is_monday)as (
select temp.dy,temp.mth,case when DATEPART(DW,temp.dy)=2 then 1 else 0 end
from(
select DATEADD(day,-day(GETDATE())+1,GETDATE()) dy,MONTH(GETDATE()) mth
from T1
) temp
union all
select dateadd(DAY,1,x.dy),mth,case when
DATEPART(dw,dateadd(day,1,x.dy))=2 then 1 else 0 end
from x
where MONTH(DATEADD(DAY,1,dy))=mth
) select MIN(x.dy) first_month,MAX(x.dy) last_month
from x

sql server 使用递归。和mysql一样得到月份的第一天,一直递归,判断这个月的每一天是否是星期一。

sql 语句系列(月份的第一个星期的星期一和最后一个星期的星期一)[八百章之第二十一章]的更多相关文章

  1. sql 语句系列(多表之链)[八百章之第三章]

    新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...

  2. sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]

    遍历字符串 我觉得首先要提出一个疑问: 一个数据库本身就是用于存储的,遍历字符串究竟有何意义? 先看如何实现的,毕竟sql service 是没有for循环,也没有loop和while的. selec ...

  3. sql语句查询月份的数据

    在实际项目中,经常需要按月查询数据,在这里把我用到的sql整理一下,以便日后查看. 例如,查询当月的数据 ),addtime,)),) 查询结果: 查询上月的数据,需要用另一个sql函数,datead ...

  4. sql语句按月份统计查询

    select year(createdate) 年,month(createdate) 月,count(1) from public_cms_arcwhere (userid in (select i ...

  5. sql 语句系列(null 值处理)[八百章之第二章]

    查找只存在一个表中的数据 有两张表: EMP: select * from emp DEPT: 他们有共同的属性:deptno 现在要查询EMP 中的deptno不等于DEPTNO的deptno项. ...

  6. WP8.1学习系列(第二十一章)——本地应用数据

    了解如何存储和检索本地应用数据存储中的设置和文件. 路线图: 本主题与其他主题有何关联?请参阅: 使用 C# 或 Visual Basic 的 Windows 运行时应用的路线图 使用 C++ 的 W ...

  7. 数据库函数:sqlite3_exec() SQL语句

    函数:sqlite3_exec(),称为便捷函数,封装了好多任务. 函数声明: int  sqlite3_exec( sqlite   * , const  char * sql , sqlite_c ...

  8. ysql常用sql语句(12)- group by 分组查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  9. Mysql常用sql语句(18)- union 全连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 其实Mysql并没有全连接,Oracle才有全连 ...

  10. Mysql常用sql语句(5)- as 设置别名

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 需要注意,创建数据库和创建表的语句博文都在前面哦 整个 ...

随机推荐

  1. 003-Java程序流程控制

    3. Java程序流程控制(重点) 程序的三种控制结构 3.1 分支结构 if, switch 3.1.1 if if 分支 根据条件(真或假)来决定执行某段代码. if分支应用场景 if 第一种形式 ...

  2. vscode 文件上传快捷键 shift+alt+s (ftp专用)插件用的 ftp-sync

    vscode 文件上传快捷键 shift+alt+s (ftp专用)插件用的 ftp-sync { "key": "shift+alt+s", "co ...

  3. Selenium IDE 自动化测试 bug 会在console里面出 DevTools failed to load SourceMap 很不好,用完记得关掉这个程序

    Selenium IDE 自动化测试 bug 会在console里面出 DevTools failed to load SourceMap 很不好,用完记得关掉这个程序

  4. Dreamweaver基础教程:学习JavaScript

    目录 简介 用法 输出 语法 字面量 变量 操作符 语句 关键字 注释 数据类型 函数 函数表达式 Function() 构造函数 自调用函数 箭头函数 arguments 对象 使用构造函数调用函数 ...

  5. @Autowired和@Resource整理

    参考,欢迎点击原文:https://www.ixigua.com/6991282608663593508?id=6945836219422999079&logTag=944f6616c791c ...

  6. [置顶] java.io.IOException: No such file or directory解决方案之权限问题

    先贴出异常信息: java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusiv ...

  7. 关于全景(360)图片拼接的方法(Opencv3.0 Stitcher)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  8. grep 第四天

    grep 第四天 1 使用grep 取 passwd 显示行数 grep -c '' /etc/passwd [root@master ~]# grep -c '' /etc/passwd 135 2 ...

  9. 记录--Echarts绘制气泡图

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Echarts绘制气泡图 气泡图是一种用于可视化三维数据的图表类型,其中两个变量用于确定数据点在平面上的位置,另一个变量用于确定气泡的大小 ...

  10. 记录--TS类型写不好?一起来训练提升吧!

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前期准备 本篇文章的编写目的是为了提升TS类型的书写质量,高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞; 在学习本篇之前需要有一 ...