mysql中不建立放假时间表的情况下使用sql查询两个日期之间的小时数并剔除其中的周六周日

mysql中不建立放假时间表的情况下使用sql查询两个日期之间的小时数并剔除其中的周六周日时间
就很头痛,感觉无法实现,但又是这种需求

存年月日小时(甚至可以分钟),去两个时间,写个日历函数用来剔除六日,再写个计算函数用来计算时间

业务逻辑不要用数据库来处理,即使使用存储过程,数据库也不是最好的选择。
数据库的优势在于数据存储和简单查询,处理业务逻辑这件事情,要交给其他善于处理业务逻辑的技术来做。

这个可以实现的,而且不是很复杂,用递归sql生成传入两个日期间的每一天,然后对星期六和星期日的天数进行统计,并从总天数里减去这个数,最后再乘以24小时即可。
mysql8.0版本以上可以使用递归sql

with RECURSIVE cte as (select cast("2021-01-01" as datetime) d
union all
select date_add(d, interval 1 day) from cte where d<cast("2021-01-31" as datetime))
select count(d)*24 hours from cte where dayofweek(d) not in (6,7)

img

用高级语言,这种需求很容易实现。纯sql语句当然会异常复杂了