找出当前月份的第一个和最后一个星期一,可以使用SQL语句结合日期函数来实现。
- 第一个星期一的日期
要找出当前月份的第一个星期一,可以使用WEEKDAY函数来获取当前月份的第一天是星期几,并根据星期几来计算第一个星期一的日期。
SELECT
CASE
-- 第一天是星期一
WHEN WEEKDAY(DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')) = 0 THEN DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')
-- 第一天是星期二至星期六
WHEN WEEKDAY(DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')) IN (1,2,3,4,5,6) THEN DATE_FORMAT(DATE_ADD(CURRENT_DATE, INTERVAL (8 - WEEKDAY(DATE_FORMAT(CURRENT_DATE, '%Y-%m-01'))) DAY), '%Y-%m-%d')
-- 第一天是星期日
ELSE DATE_FORMAT(DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY), '%Y-%m-%d')
END AS firstMonday
在上面的SQL语句中,我们使用了DATE_FORMAT函数来获取当前日期月份的第一天,并使用WEEKDAY函数获取第一天是星期几。根据第一天是星期几,再计算第一个星期一的日期。
- 最后一个星期一的日期
要找出当前月份的最后一个星期一,同样可以使用WEEKDAY函数来获取当前月份的最后一天是星期几,并根据星期几来计算最后一个星期一的日期。
SELECT
CASE
-- 最后一天是星期日
WHEN WEEKDAY(DATE_FORMAT(LAST_DAY(CURRENT_DATE), '%Y-%m-%d')) = 0 THEN DATE_FORMAT(DATE_ADD(LAST_DAY(CURRENT_DATE), INTERVAL -6 DAY), '%Y-%m-%d')
-- 最后一天是星期一至星期六
WHEN WEEKDAY(DATE_FORMAT(LAST_DAY(CURRENT_DATE), '%Y-%m-%d')) IN (1,2,3,4,5,6) THEN DATE_FORMAT(DATE_ADD(LAST_DAY(CURRENT_DATE), INTERVAL (1 - WEEKDAY(DATE_FORMAT(LAST_DAY(CURRENT_DATE), '%Y-%m-%d'))) DAY,'%Y-%m-%d')
-- 最后一天是星期一
ELSE DATE_FORMAT(DATE_ADD(LAST_DAY(CURRENT_DATE), INTERVAL -6 DAY), '%Y-%m-%d')
END AS lastMonday
在上面的SQL语句中,我们使用了LAST_DAY函数来获取当前日期月份的最后一天,并使用WEEKDAY函数获取最后一天是星期几。根据最后一天是星期几,再计算最后一个星期一的日期。
- 完整SQL代码
将上面两条SQL语句合并成一个完整的代码片段:
SELECT
CASE
WHEN WEEKDAY(DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')) = 0 THEN DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')
WHEN WEEKDAY(DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')) IN (1,2,3,4,5,6) THEN DATE_FORMAT(DATE_ADD(CURRENT_DATE, INTERVAL (8 - WEEKDAY(DATE_FORMAT(CURRENT_DATE, '%Y-%m-01'))) DAY), '%Y-%m-%d')
ELSE DATE_FORMAT(DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY), '%Y-%m-%d')
END AS firstMonday,
CASE
WHEN WEEKDAY(DATE_FORMAT(LAST_DAY(CURRENT_DATE), '%Y-%m-%d')) = 0 THEN DATE_FORMAT(DATE_ADD(LAST_DAY(CURRENT_DATE), INTERVAL -6 DAY), '%Y-%m-%d')
WHEN WEEKDAY(DATE_FORMAT(LAST_DAY(CURRENT_DATE), '%Y-%m-%d')) IN (1,2,3,4,5,6) THEN DATE_FORMAT(DATE_ADD(LAST_DAY(CURRENT_DATE), INTERVAL (1 - WEEKDAY(DATE_FORMAT(LAST_DAY(CURRENT_DATE), '%Y-%m-%d'))) DAY,'%Y-%m-%d')
ELSE DATE_FORMAT(DATE_ADD(LAST_DAY(CURRENT_DATE), INTERVAL -6 DAY), '%Y-%m-%d')
END AS lastMonday
以上就是查询当前月份的第一个和最后一个星期一的SQL攻略,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL 找出当前月份的第一个和最后一个星期一 - Python技术站