【问题标题】:How to get the end week of a DATETIME column in mySQL如何在 mySQL 中获取 DATETIME 列的结束周
【发布时间】:2021-12-11 20:39:15
【问题描述】:

我正在使用 MySQL,但在从 DATETIME 列获取周末日期时遇到问题,该列将周末视为星期日,

我的桌子是这样的:

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,因为该周在星期日结束。有谁知道这个用什么函数?

【问题讨论】:

  • SELECT DATE(datetime_column) + INTERVAL 6 - WEEKDAY(datetime_column) DAY
  • @Akina 这行得通!太感谢了。我希望我没有问太多,但你能描述一下 INTERVAL 6 - WEEKDAY 和 DAY 函数在做什么吗?我不太明白。
  • WEEKDAY 函数返回 DOW 的数量。 6 - WEEKDAY(datetime_column) 是一个算术表达式,用于计算到周日的天数。 + INTERVAL xx DAY 将此天数添加到日期中。

标签: mysql sql date datetime week-number


【解决方案1】:

这是对 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

将返回以下内容。

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

请注意WEEKDAY(date)(在表中别名为wkd)返回4。这意味着它是FridayAccording to the docs, WEEKDAY() 函数返回如下:

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

将 6 天间隔添加到当前 WEEKDAY() 结果将转到当前 date 值的前一天的前一天。因此,WEEKDAY(2021-01-01) 位于 Friday 上,在提前 6 天添加后变为 2021-01-07 位于 Thursday 上。减去先前获得的WEEKDAY() 值,运算变为DATE + INTERVAL (6 - 4) DAY,实际上变为DATE + INTERVAL 2 DAY

Here's a fiddle

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 2021-05-19
    • 2012-03-05
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2018-07-21
    相关资源
    最近更新 更多