MySQL 如何在MySQL中获取每个对应月份的第一天?

MySQL 如何在MySQL中获取每个对应月份的第一天?

在数据分析过程中,我们经常需要按月份进行数据汇总和统计。但在MySQL中,日期数据以时间戳的形式储存,并不能直接按月份进行分组。

本文将介绍如何通过MySQL语法获取每个对应月份的第一天。

阅读更多:MySQL 教程

方法一:使用DATE_FORMAT函数

我们可以使用DATE_FORMAT函数来抽取日期中的年份和月份,然后拼接成一个形如“2022-01-01”的日期格式,从而获取每个对应月份的第一天。下面是示例代码:

SELECT DATE_FORMAT(date_column, '%Y-%m-01') AS first_day_of_month
FROM table_name;

其中,date_column为日期类型的列名,table_name为表名。

例:假设我们有以下一张名为sales的表,包含dateamount两个列:

date amount
2022-01-05 14:23:45 100
2022-02-12 11:30:55 200
2022-03-03 09:43:21 150
2022-01-25 16:17:32 250

我们可以使用以下代码获取每个月的第一天和该月的销售总额:

SELECT DATE_FORMAT(date, '%Y-%m-01') AS first_day_of_month, SUM(amount) AS total_sales
FROM sales
GROUP BY DATE_FORMAT(date, '%Y-%m-01');

输出结果为:

first_day_of_month total_sales
2022-01-01 350
2022-02-01 200
2022-03-01 150

方法二:使用LAST_DAY和INTERVAL函数

除了使用DATE_FORMAT函数,我们还可以使用LAST_DAY函数来获取每个月的最后一天,再使用INTERVAL函数获取该月的第一天。下面是示例代码:

SELECT LAST_DAY(date_column) - INTERVAL DAYOFMONTH(date_column) - 1 DAY AS first_day_of_month
FROM table_name;

同样,date_column为日期类型的列名,table_name为表名。

例:假设我们有以下一张名为orders的表,包含order_dateprice两个列:

order_date price
2022-01-02 14:23:45 50
2022-02-14 11:30:55 80
2022-03-05 09:43:21 70
2022-01-29 16:17:32 90

我们可以使用以下代码获取每个月的第一天和该月的订单总额:

SELECT LAST_DAY(order_date) - INTERVAL DAYOFMONTH(order_date) - 1 DAY AS first_day_of_month, SUM(price) AS total_sales
FROM orders
GROUP BY LAST_DAY(order_date) - INTERVAL DAYOFMONTH(order_date) - 1 DAY;

输出结果为:

first_day_of_month total_sales
2022-01-01 140
2022-02-01 80
2022-03-01 70

方法三:使用DATE函数和STR_TO_DATE函数

除了以上两种方法,我们还可以使用DATE函数和STR_TO_DATE函数来获取每个月的第一天。下面是示例代码:

SELECT DATE_FORMAT(STR_TO_DATE(CONCAT(YEAR(date_column), '-', MONTH(date_column), '-01'), '%Y-%m-%d'), '%Y-%m-%d') AS first_day_of_month
FROM table_name;

同样,date_column为日期类型的列名,table_name为表名。

例:假设我们有以下一张名为expenses的表,包含dateamount两个列:

date amount
2022-01-03 10:23:45 50
2022-02-14 11:30:55 80
2022-03-05 09:43:21 70
2022-01-29 16:17:32 90

我们可以使用以下代码获取每个月的第一天和该月的开支总额:

SELECT DATE_FORMAT(STR_TO_DATE(CONCAT(YEAR(date), '-', MONTH(date), '-01'), '%Y-%m-%d'), '%Y-%m-%d') AS first_day_of_month, SUM(amount) AS total_expenses
FROM expenses
GROUP BY DATE_FORMAT(STR_TO_DATE(CONCAT(YEAR(date), '-', MONTH(date), '-01'), '%Y-%m-%d'), '%Y-%m-%d');

输出结果为:

first_day_of_month total_expenses
2022-01-01 140
2022-02-01 80
2022-03-01 70

结论

通过以上三种方法,我们可以方便地获取MySQL中每个对应月份的第一天,从而进行按月份的数据分组和统计。根据实际场景和数据格式,可以选择不同的方法。同时,我们还可以对代码进行优化和组合,以满足不同的需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程