sql 语句系列(月份的第一个星期的星期一和最后一个星期的星期一)[八百章之第二十一章]
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 语句系列(月份的第一个星期的星期一和最后一个星期的星期一)[八百章之第二十一章]的更多相关文章
- sql 语句系列(多表之链)[八百章之第三章]
新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...
- sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]
遍历字符串 我觉得首先要提出一个疑问: 一个数据库本身就是用于存储的,遍历字符串究竟有何意义? 先看如何实现的,毕竟sql service 是没有for循环,也没有loop和while的. selec ...
- sql语句查询月份的数据
在实际项目中,经常需要按月查询数据,在这里把我用到的sql整理一下,以便日后查看. 例如,查询当月的数据 ),addtime,)),) 查询结果: 查询上月的数据,需要用另一个sql函数,datead ...
- sql语句按月份统计查询
select year(createdate) 年,month(createdate) 月,count(1) from public_cms_arcwhere (userid in (select i ...
- sql 语句系列(null 值处理)[八百章之第二章]
查找只存在一个表中的数据 有两张表: EMP: select * from emp DEPT: 他们有共同的属性:deptno 现在要查询EMP 中的deptno不等于DEPTNO的deptno项. ...
- WP8.1学习系列(第二十一章)——本地应用数据
了解如何存储和检索本地应用数据存储中的设置和文件. 路线图: 本主题与其他主题有何关联?请参阅: 使用 C# 或 Visual Basic 的 Windows 运行时应用的路线图 使用 C++ 的 W ...
- 数据库函数:sqlite3_exec() SQL语句
函数:sqlite3_exec(),称为便捷函数,封装了好多任务. 函数声明: int sqlite3_exec( sqlite * , const char * sql , sqlite_c ...
- ysql常用sql语句(12)- group by 分组查询
测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...
- Mysql常用sql语句(18)- union 全连接
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 其实Mysql并没有全连接,Oracle才有全连 ...
- Mysql常用sql语句(5)- as 设置别名
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 需要注意,创建数据库和创建表的语句博文都在前面哦 整个 ...
随机推荐
- adb monkey 有哪些参数?
adb monkey 是 Android Debug Bridge (ADB) 工具中的一个命令,用于执行随机事件来对 Android 应用进行压力测试.以下是 adb monkey 命令的一些常用参 ...
- 【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统
基于SpringBoot+vue+iview个人极简博客 项目介绍 个人极简博客 [个人极简博客]是一个适用于初学者学习的博客系统,其中包含文章分类.写文章.标签管理.用户管理等基础功能,代码简洁注释 ...
- 手机端User-agent
转载: http://www.fynas.com/ua 设备 系统 浏览器 User-Agent vivo X20Plus A Android 手机百度 Mozilla/5.0 (Linux; And ...
- 单词本z ambition 雄心 amb = ab = about = around = 环绕
ambition 雄心 amb = ab = about = around = 环绕 it = go = 走 ion 名词 重点是 amb 环绕 这里是抽象含义 表示内心向外扩展 所以是雄心 ambu ...
- 百度api经历
底部参考文档,欢迎点击:https://www.runoob.com/http/http-content-type.html 这两天遇到了点糟心事,因为小伙伴走了.然后事情起因是这样的,来了个任务封装 ...
- 怎么实现Redis的高可用?(主从、哨兵、集群)
高可用有两个含义:一是数据尽量不丢失,二是保证服务尽可能可用. AOF 和 RDB 数据持久化保证了数据尽量不丢失,那么多节点来保证服务尽可能提供服务. 一般在实际生产中,服务不会部署成单节点,主要是 ...
- .NET Core使用 CancellationToken 取消API请求
您是否曾经访问过一个网站,它需要很长时间加载,最终你敲击 F5 重新加载页面. 即使用户刷新了浏览器取消了原始请求,而对于服务器来说,API也不会知道它正在计算的值将在结束时被丢弃,刷新五次,服务器将 ...
- 【个人笔记】VirtualBox7+Debian11基础环境搭建
本文主要是对在最新的VirtualBox7上搭建Debian11的笔记记录,方便后续个人回顾,同时搭配对配置的浅析. sudoers配置 非root用户想要使用sudo命令,需要两个条件: 系统安装了 ...
- 记录--Vue3基于Grid布局简单实现一个瀑布流组件
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在学习Grid布局之时,我发现其是CSS中的一种强大的布局方案,它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局 ...
- clickhouse在各大厂商的应用
案例-ClickHouse在头条的技术演进