⭕️前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(点击跳转到网站)⭕️
一、MySQL中关于DAYOFWEEK和WEEKDAY
DAYOFWEEK和WEEKDAY均是MySQL中的日期实际函数,用于获取当前日期是星期几,但是二者存在差别
-
DAYOFWEEK
1 代表星期日 (Sunday)
2 代表星期一 (Monday)
3 代表星期二 (Tuesday)
4 代表星期三 (Wednesday)
5 代表星期四 (Thursday)
6 代表星期五 (Friday)
7 代表星期六 (Saturday)
-
WEEKDAY
0代表星期日 (Sunday)
1 代表星期一 (Monday)
2 代表星期二 (Tuesday)
3 代表星期三 (Wednesday)
4 代表星期四 (Thursday)
5 代表星期五 (Friday)
6 代表星期六 (Saturday)
举例:
/*
星期一:2024-10-21
星期二:2024-10-22
星期三:2024-10-23
星期四:2024-10-24
星期五:2024-10-25
星期六:2024-10-26
星期天:2024-10-27
*/
SELECT DAYOFWEEK("2024-10-21") -- 2 星期一
SELECT WEEKDAY("2024-10-21") -- 0 星期一
无论用哪一个函数,都不符合一个我国星期一为一周的第一天的基本概念
DAYOFWEEK说明
- 查询输入日期所在周的其他星期的日期
-- 第一步
SELECT DAYOFWEEK("2024-10-25") -- 星期五返回6
-- 第二步
SELECT (DAYOFWEEK("2024-10-25") + 5) -- 无论是星期几均加上5
-- 第三步
SELECT (((DAYOFWEEK("2024-10-26") + 5) %7)+1) -- 得到的值经过计算转换,对应返回值便是按照星期一等于1,星期二等于2以此类推返回
-- 最终结果
SELECT (DATE_SUB("2024-10-25", INTERVAL ( SELECT (((DAYOFWEEK("2024-10-25") + 5) % 7) + 1) - 7) DAY)) -- 获取所查日期所属周的星期天日期-- 经过以上处理后,再去取某一天是星期几就很直观,只需要看减掉掉几天就是星期几,该步骤主要因为国外的“第一天”是星期天,相当于这个函数的值的排序对我们来说就说2345671,不进行处理无法直观得到查询日期所属周的其他星期日期
- 模板
?代表所查询日期,@代表查询日期所属周星期几,1234567对应周一~周天
SELECT (DATE_SUB(?, INTERVAL ( SELECT (((DAYOFWEEK(?) + 5) % 7) + 1) - @) DAY)) as new_date
WEEKDAY说明
- 查询输入日期所在周的其他星期的日期
-- 第一步
SELECT (WEEKDAY("2024-10-27") +1) -- 该函数对应值是符合基本顺序的,所以直接+1即可
-- 第二步
SELECT (DATE_SUB("2024-10-21", INTERVAL (SELECT (WEEKDAY("2024-10-21") +1)-6)DAY)) -- 和 DAYOFWEEK是相同的
- 模板
?代表所查询日期,@代表查询日期所属周星期几,1234567对应周一~周天
SELECT (DATE_SUB(?, INTERVAL (SELECT (WEEKDAY(?) +1)-@)DAY)) as new_date
附加DATE_SUB和INTERVAL 说明
- 在MySQL中,
DATE_SUB
是一个日期和时间函数,用于从给定的日期或日期时间值中减去指定的时间间隔。它通常与INTERVAL
关键字一起使用,以实现对日期和时间的减法操作
DATE_SUB(date, INTERVAL value unit)
/*
date: 要进行减法操作的日期或日期时间值。
value: 要减去的时间间隔的数量。
unit: 时间间隔的单位,如 DAY, MONTH, YEAR, HOUR, MINUTE, SECOND 等。
*/
- 举例
-- 减去天数
SELECT DATE_SUB('2023-10-01', INTERVAL 7 DAY); -- 结果为 '2023-09-24'
-- 减去月份
SELECT DATE_SUB('2023-10-01', INTERVAL 2 MONTH); -- 结果为 '2023-08-01'
-- 减去年份
SELECT DATE_SUB('2023-10-01', INTERVAL 1 YEAR); -- 结果为 '2022-10-01'
-- 减去时分秒
SELECT DATE_SUB('2023-10-01 12:00:00', INTERVAL 2 HOUR); -- 结果为 '2023-10-01 10:00:00'
SELECT DATE_SUB('2023-10-01 12:00:00', INTERVAL 30 MINUTE); -- 结果为 '2023-10-01 11:30:00'
SELECT DATE_SUB('2023-10-01 12:00:00', INTERVAL 45 SECOND); -- 结果为 '2023-10-01 11:59:15'
-- 结合其他函数
SELECT DATE_SUB(NOW(), INTERVAL 1 WEEK); -- 当前时间减去一周