mysql 8.0.11 获取指定时间段中所有日期或月份(不设存储过程,不加表)

最近需要用mysql获取一个时间段中的所有月份,网上查都是要设置存储过程或者加一个日期表的,不满足我的需求。并且从某博客查找到的并不满足mysql数据库版本8.0.11的要求(测试mysql数据库版本5.7.33的可以),所以结合自己查找的资料,修改得到需求。

获取某月份中的所有日期

select DATE_FORMAT(m1, '%Y-%m-%d') full_month,
DATE_FORMAT(m1, '%d日') format_date
from(
	select 
		(concat('2021-04','-01') -  INTERVAL DAYOFMONTH(concat("2021-04","-01"))-1 DAY) 
		+INTERVAL m DAY as m1
	from(
		select @rownum:=@rownum+1 as m from
		(select 1 union select 2 union select 3 union select 4) t1,
		(select 1 union select 2 union select 3 union select 4) t2,
		(select 1 union select 2 union select 3 union select 4) t3,
		(select 1 union select 2 union select 3 union select 4) t4,
		(select 1 union select 2 union select 3 union select 4) t5,
		(select @rownum:=-1) t0
	) d1
) d2 
where m1< date_format(DATE_ADD(concat('2021-04','-01'), INTERVAL 1 MONTH),'%Y-%m-%d')
order by m1

上面代码段所用的的一些DATE_FORMAT(日期格式化)、CONCAT(字符串连接)、DATE_ADD(日期加法)等一些函数可以自行百度用法。此处不再赘述。

获取mysql中两个日期之间的月份列表

select DATE_FORMAT(m1, '%Y-%m') full_month,DATE_FORMAT(m1, '%Y年%m月') format_month
from(
	select 
		('2021-04-01' -  INTERVAL DAYOFMONTH('2021-05-03')-1 DAY) 
		+INTERVAL m MONTH as m1
	from(
		select @rownum:=@rownum+1 as m from
		(select 1 union select 2 union select 3 union select 4) t1,
		(select 1 union select 2 union select 3 union select 4) t2,
		(select 1 union select 2 union select 3 union select 4) t3,
		(select 1 union select 2 union select 3 union select 4) t4,
		(select @rownum:=-1) t0
	) d1
) d2 
where m1<= '2021-05-03'
order by m1

类似上面的。

参考1

参考2

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值