我正在使用 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,因為那一周在星期日結束。有誰知道為此使用什么功能?
uj5u.com熱心網友回復:
以下是 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
將回傳以下內容。
| 唯一身份 | 日期 | 域名 | 周天 |
|---|---|---|---|
| 456 | 2021-01-01 15:02:19 | 星期五 | 4 |
請注意WEEKDAY(date)(wkd表中的別名)回傳 4。這意味著它是Friday. 根據 docs,WEEKDAY()函式回傳如下:
0 = Monday
1 = Tuesday
2 = Wednesday
3 = Thursday
4 = Friday
5 = Saturday
6 = Sunday
將 6 天間隔添加到當前WEEKDAY()結果將轉到當前date值的下一個同一天名的前一天。所以WEEKDAY(2021-01-01)哪個開啟Friday,2021-01-07在Thursday提前 6 天添加后變成哪個開啟。減去先前獲得的WEEKDAY()值,運算變為DATE INTERVAL (6 - 4) DAY,實際上變為DATE INTERVAL 2 DAY。
這是一把小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/338588.html
上一篇:將字符突變為R中的日期/時間
