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


飞致云 发布于 2023-05-25 / 291 阅读 / 0 评论 /
巧妙利用日历图计算当前日期属于本月第几周 1 先看答案 SELECT CEILING((DAY(NOW())+WEEKDAY(NOW()-INTERVAL DAY(NOW())-1 DAY)) / 7 ) 涉及到的 MySQL 函数/关键字 函数/关键字 用途 NOW() 获

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

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 解析

2.1 总体思想

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

2.2 步骤分解

-- 获取当前时间,假设返回结果为 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 );


是否对你有帮助?