【MySQL】星期函数 weekday 和 dayofweek 知识学习及使用

力扣题

1、题目地址

2298. 周末任务计数

2、模拟表

表:Tasks

Column Name Type
task_id int
assignee_id int
submit_date date
  • task_id 是该表的主键(具有唯一值的列)。
  • 此表中的每一行都包含任务 ID、委托人 ID 和提交日期。

3、要求

编写一个解决方案来报告:

在周末 (周六,周日) 提交的任务的数量 weekend_cnt,以及
工作日内提交的任务数 working_cnt。
按 任意顺序 返回结果表。
返回结果格式如以下示例所示。

示例 1:

输入:
Tasks 表:

task_id assignee_id submit_date
1 1 2022-06-13
2 6 2022-06-14
3 6 2022-06-15
4 3 2022-06-18
5 5 2022-06-19
6 7 2022-06-19

输出:

weekend_cnt working_cnt
3 3

解释:
Task 1 是在周一提交的。
Task 2 是在周二提交的。
Task 3 是在周三提交的。
Task 4 是在周六提交的。
Task 5 是在周日提交的。
Task 6 是在周日提交的。
3 个任务是在周末提交的。
3 个任务是在工作日提交的。

4、代码编写

知识点

1、weekday 函数返回给定日期的工作日编号。
注意: 0 = 星期一,1 = 星期二,2 = 星期三,3 = 星期四,4 = 星期五,5 = 星期六,6 = 星期日

2、dayofweek 函数返回给定日期的工作日索引(从 1 到 7 的数字)。
注意: 1 = 星期日,2 = 星期一,3 = 星期二,4 = 星期三,5 = 星期四,6 = 星期五,7 = 星期六

我的写法

SELECT SUM(weekday(submit_date) = 5 OR weekday(submit_date) = 6) AS weekend_cnt, 
       SUM(weekday(submit_date) != 5 AND weekday(submit_date) != 6) AS working_cnt
FROM Tasks

网友写法

第一种

SELECT SUM(dayofweek(submit_date) = 7 OR dayofweek(submit_date) = 1) AS weekend_cnt, 
       SUM(dayofweek(submit_date) != 7 AND dayofweek(submit_date) != 1) AS working_cnt
FROM Tasks

第一种的简化版

SELECT SUM(dayofweek(submit_date) IN (1, 7)) AS weekend_cnt, 
       SUM(dayofweek(submit_date) NOT IN (1, 7)) AS working_cnt
FROM Tasks

模仿上面简化版,我的写法也可以改成

SELECT SUM(weekday(submit_date) IN (5, 6)) AS weekend_cnt, 
       SUM(weekday(submit_date) NOT IN (5, 6)) AS working_cnt
FROM Tasks

你可能感兴趣的:(#,MySQL,mysql)