Oracle的表服務器提供了一個內置功能TRUNC(timestamp,'DY')。此功能將任何時間戳轉換為前一個星期日的午夜。在MySQL中執行此操作的最佳方法是什么?Oracle還提供TRUNC(timestamp,'MM')將時間戳轉換為發生該月的第一天的午夜。在MySQL中,這很簡單:TIMESTAMP(DATE_FORMAT(timestamp, '%Y-%m-01'))但是這個DATE_FORMAT技巧將在數周內失效。我知道此WEEK(timestamp)功能,但是我真的不想要一年內的星期數。這些東西是用于多年的工作。
3 回答

嚕嚕噠
TA貢獻1784條經驗 獲得超7個贊
您可以同時使用YEAR(timestamp)和和WEEK(timestamp),并在SELECT和GROUP BY子句中使用這兩個表達式。
不太優雅,但功能...
當然,您也可以將這兩個日期部分組合為一個表達式,例如
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
編輯:正如馬丁指出的那樣,您也可以使用該YEARWEEK(mysqldatefield)函數,盡管其輸出不如上面的較長公式對眼睛友好。
編輯2 [3年半后!]:
YEARWEEK(mysqldatefield)使用可選的第二個參數(mode設置為0或2)可能是通過聚合的最佳途徑完整周(即包括了幾個星期,其跨在1月1日),如果是所需要的。YEAR() / WEEK()此答案最初提出的方法的效果是將此類“跨越”周的匯總數據分成兩部分:一個與前一年,一個與新年。
在會計等方面,通常需要每年進行一次完整的清理,以不超過兩周的時間為代價,在兩端分別花費一個星期,因此這種YEAR() / WEEK()方法更好。
- 3 回答
- 0 關注
- 1589 瀏覽
添加回答
舉報
0/150
提交
取消