如何在 mySQL 中获取 DATETIME 列的结束周

How to get the end week of a DATETIME column in mySQL

我正在使用 MySQL 并且在从 DATETIME 列获取周末日期时遇到问题,其中周末被视为星期日,

我的 table 看起来像这样:

Unique_ID Date
123 2020-07-13 17:03:31.035
456 2021-01-01 15:02:19.029
789 2020-08-02 18:07:14.011

我需要获取星期日结束的每一行的星期。不需要时间。因此 2021-01-01 的最终结果将显示 2021-01-03,因为该周在周日结束。有谁知道这个要用什么函数吗?

以下是 Akina 在评论中的建议的详细说明(我希望如此):

SELECT *,
       dt + INTERVAL 6 DAY add6 /*add 6 day ahead*/,
       DAYNAME(dt + INTERVAL 6 DAY) dn6 /*6 day ahead dayname*/,
       dt + INTERVAL (6 - wkd) DAY nxtsun /*add 6 day ahead then subtract weekday value from date column*/,
       DAYNAME(dt + INTERVAL (6 - wkd) DAY) nxtsundn
FROM
(SELECT *, 
       DATE(date) dt,
       DAYNAME(date) dn,
       WEEKDAY(date) wkd
FROM mytable) A;

让我们从您的数据样本中提取第二行来说明正在发生的事情。上面的基本查询:

SELECT *, 
       DATE(date) dt,
       DAYNAME(date) dn,
       WEEKDAY(date) wkd
FROM mytable

请问return以下

Unique_ID Date dn wkd
456 2021-01-01 15:02:19 Friday 4

请注意 WEEKDAY(date)(在 table 中别名为 wkd)returns 4。这意味着它是 FridayAccording to the docsWEEKDAY() 函数 return 如下所示:

0 = Monday
1 = Tuesday
2 = Wednesday
3 = Thursday
4 = Friday
5 = Saturday
6 = Sunday

将 6 天间隔添加到当前 WEEKDAY() 结果将转到当前 date 值的下一个相同日期名称的前一天。因此 Friday 上的 WEEKDAY(2021-01-01) 在提前 6 天添加后变为 Thursday 上的 2021-01-07。减去之前获得的 WEEKDAY() 值,运算变为 DATE + INTERVAL (6 - 4) DAY,实际上变为 DATE + INTERVAL 2 DAY.

Here's a fiddle