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 需要注意,创建数据库和创建表的语句博文都在前面哦 整个 ...
随机推荐
- zookeeper源码(10)node增删改查及监听
本文将从leader处理器入手,详细分析node的增删改查流程及监听器原理. 回顾数据读写流程 leader ZookeeperServer.processPacket封装Request并提交给业务处 ...
- MySQL基础篇快速记忆和查询
查询 语法: SELECT 标识选择哪些列 FROM 标识从哪个表中选择 去重(Distinct) 在SELECT语句中使用关键字DISTINCT去除重复行 SELECT DISTINCT depar ...
- Zabbix“专家坐诊”第198期问答汇总
问题一 Q:请问一下,自带的思科SNMP交换机模板,怎么不监控down的接口? A1:这种一般在自动发现规则里加个过滤器,过滤出IFSTATUS匹配(1|3)的就能实现只发现up的端口了. A2: 1 ...
- tomcat startup.bat 包含springboot的输出 里面乱码的解决方案
springboot输出是用的 logger 它的编码是 UTF-8 tomcat 默认也是UTF-8 但是win10 默认的 命令窗口是 GBK的,如果把tomcat 和 springboot的格式 ...
- Python 动态网页Fetch/XHR爬虫——以获取NBA球员信息为例
Python 动态网页Fetch/XHR爬虫--以获取NBA球员信息为例 动态网页抓取信息,一般利用F12开发者工具-网络-Fetch/XHR获取信息,实现难点有: 动态网页的加载方式 获取请求Url ...
- Java Spring Redis 如何向Set中添加List?
调用list.toArray方法将list转成数组,再使用add方法参数传入数组,即可批量添加. redisTemplate.opsForSet().add(key,collect.toArray(n ...
- Android USB开发1—开发环境搭建
通过Genymotion 与 VirtualBox 可以实现将电脑中的USB设备转接到Android模拟器中进行通信. Genymotion 配置 首先从https://www.genymotion. ...
- 反编译和逆向出现:java.lang.VerifyError(新问题样本)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 记录--UNI-APP安卓本地打包详细教程(保姆级)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.开发环境 uni-app 官方文档地址 原生开发者支持 1.Android Studio 下载地址:Android Studio官网 ...
- go两种遍历chan
go中对通道chan遍历有两种方式一种是用range另一种为for select. package main import ( "fmt" "strings" ...