51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

【SQL 技巧】巧妙利用日历图计算当前日期属于本月第几周

巧妙利用日历图计算当前日期属于本月第几周

1 先看答案 {#heading-1}

SELECT CEILING((DAY(NOW())+WEEKDAY(NOW()-INTERVAL DAY(NOW())-1 DAY)) / 7 )

涉及到的 MySQL 函数/关键字

| 函数/关键字 | 用途 | |---------------|----------------------| | NOW() | 获取当前时间 | | CEILING() | 向上取整 | | DAY(date) | 计算 date 是本月的第几天 | | WEEKDAY(date) | 计算 date 是本周周几,0 表示周一 | | INTERVAL | 关键字,计算时间间隔 |

2 解析 {#heading-2}

2.1 总体思想 {#heading-3}

参考以下日历图,在图中可以看到,4 月 20 日是 4 月的第四周。方法是从上往下数第四行。按照这个思想,我们只需要知道 3 月 27 日到 4 月 20 日一共有几天,然后除以 7 向上取整即可。也就是 CEILING((20+5)/7)。

2.2 步骤分解 {#heading-4}

-- 获取当前时间,假设返回结果为 2023-04-20 12:00:00
SELECT NOW();

-- 本月第几天,结果为 20
SELECT DAY(NOW());


-- 本月第一天的日期,结果为 2023-04-01 12:00:00
SELECT NOW() - INTERVAL DAY(NOW()) -1 DAY;


-- 本月第一天是周几,结果为 5
SELECT WEEKDAY(NOW() - INTERVAL DAY(NOW()) -1 DAY);


-- 当前天数加上补齐日期矩阵需要的上月占用的天数,结果为 25
SELECT (DAY(NOW()) + WEEKDAY(NOW() - INTERVAL DAY(NOW()) -1 DAY));

`-- 除以每周的天数 7,并向上取整,最终结果为 4
SELECT CEILING((DAY(NOW()) + WEEKDAY(NOW() - INTERVAL DAY(NOW()) -1 DAY))/ 7 );`

赞(0)
未经允许不得转载:工具盒子 » 【SQL 技巧】巧妙利用日历图计算当前日期属于本月第几周