mysql 获取 月、某个时间段 的每一天时间

在日常开发中经常会统计 业务表 一些 每天的数据,但是每天有时候并不一定有数据,如果用sql 的话可能是需要先查出 所有的日期 做主信息 去 左连接
获取当前月 或者 某个月的每一天
借助了mysql 的辅助表 help_topic

SELECT
date_add(
-- 这个是当前月的 这个地方可以 使用个动态参数 代入 
-- CONCAT(YEAR(Date(curdate())),'-0',MONTH(Date(curdate())),'-','01'), 
CONCAT('2023-11','-','01'),
INTERVAL ( cast( help_topic_id AS signed INTEGER ) ) DAY
) DAY
FROM
mysql.help_topic
WHERE
help_topic_id < DAY ( last_day( CONCAT('2023-11','-','01') ) )
ORDER BY
help_topic_id

获取某个时间段的每一天信息

SELECT
date_add( date_sub( '2023-05-06', INTERVAL 1 DAY ), INTERVAL ( cast( help_topic_id AS signed INTEGER ) + 1 ) DAY ) days
FROM
mysql.help_topic
WHERE
help_topic_id < DATEDIFF(
'2023-06-06',
date_sub( '2023-05-06', INTERVAL 1 DAY ))
ORDER BY
help_topic_id

有时候也会遇到 统计业务表的 每个月的数据 每个月也不一定有数据所以 在业务表分组之后 统计出来数据 还是要 和日期 月份做关联 【过去13个月的 月份】

SELECT
   DATE_FORMAT(( '2023-11-29' ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 1 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 2 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 3 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 4 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 5 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 6 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 7 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 8 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 9 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 10 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 11 MONTH ), '%Y-%m' ) AS 'months' UNION
SELECT
   DATE_FORMAT(('2023-11-29' - INTERVAL 12 MONTH ), '%Y-%m' ) AS 'months'

查询 月份的双休日有多少天 其中月份可以当动态参数传递进来

	SELECT
		count( 1 ) total,
		count( CASE WHEN DAYOFWEEK( a.`day` )  IN ( 1, 7 ) THEN 1 ELSE NULL END ) restDay 
	FROM
		(
		SELECT
			date_add( CONCAT( '2023-11', '-', '01' ), INTERVAL ( cast( help_topic_id AS signed INTEGER ) ) DAY ) DAY 
		FROM
			mysql.help_topic 
		WHERE
			help_topic_id < DAY ( last_day( CONCAT( '2023-11', '-', '01' ) ) ) 
		ORDER BY
			help_topic_id 
		) a 

开发中的点点滴滴随手记录一下,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值