mysql - 如何在 mySQL 中获取 DATETIME 列的结束周
问题描述
我正在使用 MySQL,并且在从 DATETIME 列获取周末日期时遇到问题,该列的周末被认为是星期日,
我的表如下所示:
唯一身份 | 日期 |
---|---|
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
将返回以下内容。
唯一身份 | 日期 | dn | 周 |
---|---|---|---|
456 | 2021-01-01 15:02:19 | 星期五 | 4 |
请注意,WEEKDAY(date)
(如表中的别名wkd
)返回 4。这意味着它是Friday
. 根据文档,WEEKDAY()
函数返回如下:
0 = Monday
1 = Tuesday
2 = Wednesday
3 = Thursday
4 = Friday
5 = Saturday
6 = Sunday
将 6 天间隔添加到当前WEEKDAY()
结果将转到当前date
值的下一个相同日期的前一天。所以WEEKDAY(2021-01-01)
which is on ,在提前 6 天添加后Friday
变为2021-01-07
which is on 。Thursday
减去之前获得的WEEKDAY()
值,操作变为DATE + INTERVAL (6 - 4) DAY
,实际上变为DATE + INTERVAL 2 DAY
。
推荐阅读
- python - 在多个损失 keras 上训练具有单个输出的模型
- r - 具有多个参数的嵌套应用
- keras - Keras:恢复训练的加载检查点模型会降低准确性吗?
- linux - 如何识别远程 SSH 上的 BLANK 终端?
- mysql - 带有随机名称列表的 MySQL UPDATE
- javascript - 如何让 GraphQL 知道我是否想从另一个 rootQuery 解析字段?
- jsp - 如何在 Tomcat 9 中绑定和 ejb?
- javascript - 值为 0 时图形线变细
- javascript - 消息:“无法上传” | 带帖子的角度上传图像
- python - Writer 将奇怪的格式输出到 CSV