巧妙利用日历图计算当前日期属于本月第几周
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 );`