如何在 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。这意味着它是 Friday
。 According to the docs、WEEKDAY()
函数 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
.
我正在使用 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。这意味着它是 Friday
。 According to the docs、WEEKDAY()
函数 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
.