一、獲取當前年月
MySQL提供了多種方式獲取當前年月。在使用之前,需要確認MySQL的時區已正確設置。以下是常用的獲取當前年月的方法。
-- 方法1:使用MONTH函數和YEAR函數
SELECT YEAR(NOW()), MONTH(NOW());
-- 方法2:使用DATE_FORMAT函數
SELECT DATE_FORMAT(NOW(), '%Y-%m');
上述方法中,MONTH函數返回當前月份,YEAR函數返回當前年份。DATE_FORMAT函數將當前時間按指定格式輸出。需要注意的是,使用MONTH和YEAR函數獲取的月份和年份帶有前導零,需要根據情況剔除。
二、獲取指定日期的年月
在MySQL中,可以通過對日期進行格式化獲得指定日期的年月。
-- 獲取2021年6月的年月
SELECT DATE_FORMAT('2021-06-01', '%Y-%m');
上述代碼中,DATE_FORMAT函數的第一個參數是需要格式化的日期,第二個參數是輸出的格式。%Y表示四位年份,%m表示兩位月份。
三、獲取最近N個月的年月
MySQL提供了LAST_DAY函數和DATE_ADD函數幫助獲取最近N個月的年月。以下是獲取最近3個月的年月的方法。
SELECT DATE_FORMAT(LAST_DAY(DATE_SUB(NOW(), INTERVAL 3 MONTH)), '%Y-%m');
上述代碼中,LAST_DAY函數返回指定日期所在月份的最後一天。DATE_SUB函數用於從當前日期中減去指定時間間隔,此處為3個月。最後使用DATE_FORMAT按指定格式輸出年月。
四、獲取所有數據中的不同年月
在某些場景下,需要獲取數據庫中出現過的所有年月。可以通過GROUP BY子句實現。
-- 獲取orders表中所有不同的年月
SELECT DATE_FORMAT(order_date, '%Y-%m')
FROM orders
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
ORDER BY DATE_FORMAT(order_date, '%Y-%m') DESC;
上述代碼中,通過DATE_FORMAT函數將order_date字段格式化為年月。使用GROUP BY子句對年月進行分組,得到所有出現過的年月。
五、獲取指定時間段內每個月的數據
有時需要獲取數據庫中指定時間段內每個月的數據,可以使用時間序列表方式實現。以下是獲取2021年6月至2021年8月每個月的銷售額的方法。
-- 創建時間序列表
CREATE TEMPORARY TABLE squence(month_start DATE, month_end DATE);
SET @startdate := '2021-06-01';
SET @enddate := '2021-08-01';
WHILE @startdate < @enddate DO
INSERT INTO squence VALUES(@startdate, LAST_DAY(@startdate));
SET @startdate := DATE_ADD(@startdate, INTERVAL 1 MONTH);
END WHILE;
-- 查詢銷售額
SELECT DATE_FORMAT(s.month_start, '%Y-%m') AS month, SUM(o.amount) AS sales
FROM squence s
LEFT JOIN orders o ON o.order_date BETWEEN s.month_start AND s.month_end
GROUP BY month
ORDER BY month;
上述代碼中,首先創建了一個臨時表squence,用於存儲時間序列。其次,使用WHILE循環向squence表中插入數據,每一行表示一個月的時間段。最後使用LEFT JOIN子句將squence表和orders表連接,統計出每個月的銷售額。
原創文章,作者:JSNQE,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/369316.html