当前位置:网站首页>MySQL获取指定日期为所在月份的第几周
MySQL获取指定日期为所在月份的第几周
2022-08-08 06:27:00 【写做四月一日的四月一日】
目录
最近做项目遇到一个看起来很简单的需求——按周统计一个月内的关卡延期次数,这里我需要得到一个日期是它所在月份的周次,如今天'2022-05-27'是本月的第5周。
本来我觉得很简单,但是写起来确实有些许复杂,这里记录一下我写它的思路。
如果有方便的写法,请大佬指出,这个写法确实挺让我头疼的!!
我们先定义一个日期变量@date:
SET @date='2022-05-27';我们知道DAY()函数可以返回一个日期是当月的第几天,如'2022-05-27'返回的结果是27:
SELECT DAY(@date);
然后我们就可以获取到这个月的第一天,就是@date减去(它的day-1),这个工作可以交给DATE_SUB()函数完成:
SELECT DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY);
我们可以使用WEEKDAY()函数来获取x月1日的星期数,周一返回0、周二返回1....

则如果x月1日是周一我们不需要操作,如果x月1日不是周一,我们需要对x月1日增加(1-WEEKDAY(x月1日))天,这个判断我们可以使用mysql的IF()函数完成。
IF()函数有三个参数,第一个参数是表达式是一个布尔值,当第一个参数为true时返回第二个参数值,当第一个参数为false时返回第三个参数值。需要注意的是,mysql跟c语言相同,可以使用数值类型表示布尔值,数值0表示false,非0值表示true,于是我们可以获取到x月的第一个周一:
SELECT DATE_ADD(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY),
INTERVAL IF(WEEKDAY(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY)),
7-WEEKDAY(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY)),
0)
DAY);获取到第一个周一以后的事情就方便了,FLOOR((输入的日期-第一个周一的日期)/7)就可以知道距离第一周有几周
SELECT FLOOR(DATEDIFF(@DATE,
DATE_ADD(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY),
INTERVAL IF(WEEKDAY(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY)),
7-WEEKDAY(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY)),
0)
DAY)
)/7);
当x月1日是周一时需要对这个周数加1,当x月1日不是周一时需要对这个周数加2
得到最终结果代码
SELECT FLOOR(DATEDIFF(@DATE,DATE_ADD(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY),
INTERVAL IF(WEEKDAY(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY)),
7-WEEKDAY(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY)),
0) DAY
)
)/7
)+IF(WEEKDAY(DATE_SUB(@date,INTERVAL (DAY(@date)-1) DAY)),2,1);
运行无误
可恶啊!博客写着写着发现我之前的sql语句有问题,改代码去了,555555~
边栏推荐
- 类与对象之动静态方法,继承,名字的查找顺序,经典类和新式类,派生方法
- 【图形学】12 UnityShader语法入门
- Unity_滑动面板(滚动面板) + UI动画
- Solved the problem that when VRTK transmission under Unity HDRP, the screen fades in and out, and the visual occlusion cannot be displayed correctly when passing through the wall
- Code and ideas for implementing perpetual calendar in C language (detailed tutorial)
- CSDN21天学习挑战赛之顺序查找
- 用户管理 用户的增删改查 切换用户 用户组 用户组相关文件
- Chained queue push and pop related operations
- acwing 第63场周赛【2022.08.06】
- NVIDIA CUDA Highly Parallel Processor Programming (6): Parallel Mode: Convolution
猜你喜欢

人工神经网络的工作原理,神经网络的基本原理

模块知识点补充

NVIDIA CUDA Highly Parallel Processor Programming (8): Parallel Mode: Histogram Calculation

【图形学】09 UnityShader入门(一)

P20 美颜相机的实现——基础铺垫2

Unity HDRP下VRTK传送、穿墙 时画面淡入淡出、视觉遮挡无法正确显示问题解决

ExecutionEngineException: String conversion error: Illegal byte sequence encounted in the input.

Accelerate CNNs from Three Dimensions: A Comprehensive Pruning Framework详解

【图形学】01 数学部分(一、集合和三角函数)

Problem solving about Unity's button event response error triggering UI events
随机推荐
[Unity] GPU动画实现(四)——生成动画数据
霍夫曼树(赫夫曼树、哈夫曼树)
P21 美颜相机的实现——提速,重绘,撤回
Writing of Makefile (detailed example)
NVIDIA CUDA Highly Parallel Processor Programming (6): Parallel Mode: Convolution
最详细的Vivado安装教程
反射,魔法方法,元类相关知识点总结
多数之和小结
【图形学】 06 四元数(一)
Unity HDRP中代码动态修改天空盒以及其他环境参数
The code in Unity HDRP dynamically modifies the skybox and other environment parameters
模块知识点补充
NVIDIA CUDA Highly Parallel Processor Programming (VII): Parallel Mode: Prefix and
【Unity】unity中对象池的使用
关于剪枝对象的分类(weights剪枝、神经元剪枝、filters剪枝、layers剪枝、channel剪枝、对channel分组剪枝、Stripe剪枝)
P20 美颜相机的实现——基础铺垫2
Unity_条形图(柱状图)+ UI动画
Next主题美化
[Unity] GPU动画实现(五)——渲染GPU动画
神经网络原理的简单介绍,神经网络原理及应用