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

发布时间:2024年01月16日

力扣题

1、题目地址

2298. 周末任务计数

2、模拟表

表:Tasks

Column NameType
task_idint
assignee_idint
submit_datedate
  • task_id 是该表的主键(具有唯一值的列)。
  • 此表中的每一行都包含任务 ID、委托人 ID 和提交日期。

3、要求

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

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

示例 1:

输入:
Tasks 表:

task_idassignee_idsubmit_date
112022-06-13
262022-06-14
362022-06-15
432022-06-18
552022-06-19
672022-06-19

输出:

weekend_cntworking_cnt
33

解释:
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
文章来源:https://blog.csdn.net/weixin_50223520/article/details/135624543
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。