MySQL之统计查询,按月查询每天数据,无数据自动填充0

先上代码,着急的同学直接复制就能用

之前写过一个按年查询每月数据,无数据自动填充0,需要的话点击这里

查询语句

SELECT
	DATE_FORMAT(lefttable.date, '%Y-%m') AS yearMonth,
	lefttable.date
FROM
	(
		SELECT
			ADDDATE(y. FIRST, x.d - 1) AS date
		FROM
			(
				SELECT 01 AS d UNION ALL SELECT 02 UNION ALL SELECT 03 UNION ALL
				SELECT 04 UNION ALL SELECT 05 UNION ALL SELECT 06 UNION ALL
				SELECT 07 UNION ALL SELECT 08 UNION ALL SELECT 09 UNION ALL
				SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL
				SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL
				SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL
				SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL
				SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL
				SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL 
				SELECT 28 UNION ALL
				SELECT 29 UNION ALL
				SELECT 30 UNION ALL
				SELECT 31 
			) x,
			(
				SELECT
					CONCAT('2020-5', '-01') AS FIRST,
					DAY (
						LAST_DAY(
							str_to_date('2020-5-2', '%Y-%m')
						)
					) AS last
			) y
		WHERE
			x.d <= y.last
	) AS lefttable

结果

2020-05-01
2020-05-02
2020-05-03
2020-05-04
2020-05-05
2020-05-06
2020-05-07
2020-05-08
2020-05-09
2020-05-10
2020-05-11
2020-05-12
2020-05-13
2020-05-14
2020-05-15
2020-05-16
2020-05-17
2020-05-18
2020-05-19
2020-05-20
2020-05-21
2020-05-22
2020-05-23
2020-05-24
2020-05-25
2020-05-26
2020-05-27
2020-05-28
2020-05-29
2020-05-30
2020-05-31

关键字

DATE_FORMAT(date,format)

DATE_FORMAT(date,format)

这个不用多说吧,都知道,日期格式化嘛
参数:
	date: 日期
	format: 格式('%Y-%m-%d')

DATE_ADD(date,INTERVAL expr unit)

定义:函数向日期添加指定的时间间隔。
参数:
	date: 参数是合法的日期表达式
	expr: 参数是您希望添加的时间间隔。
	type 参数可以是下列值:
		MICROSECOND
		SECOND
		MINUTE
		HOUR
		DAY
		WEEK
		MONTH
		QUARTER
		YEAR
		SECOND_MICROSECOND
		MINUTE_MICROSECOND
		MINUTE_SECOND
		HOUR_MICROSECOND
		HOUR_SECOND
		HOUR_MINUTE
		DAY_MICROSECOND
		DAY_SECOND
		DAY_MINUTE
		DAY_HOUR
		YEAR_MONTH

示例

假设我们有如下的表:

OrderId ProductName OrderDate
1 Computer 2008-12-29

现在,我们希望向 “OrderDate” 添加 2 天,这样就可以找到付款日期。我们使用下面的 SELECT 语句:

SELECT 
	OrderId,
	DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
FROM 
	Orders

结果:

OrderId OrderPayDate
1 2008-12-31

猜你喜欢

转载自blog.csdn.net/weixin_42160515/article/details/106765742
今日推荐