获取日期之间的小时数(周末除外)

bvpmtnay  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(341)

我需要计算两次约会之间的时间,其中一次是now(),不包括周末。我发现了一些使用存储过程或mysql函数的解决方案,但我希望在单个查询中实现这一点。
我可以用这个来得到一般的时差: SELECT HOUR(TIMEDIFF(NOW(), created_at)) 但我需要这个只返回工作日的几个小时,而不是周末。所以从周五23:00到周一1:00应该只有2个小时的时间差。
任何帮助都将不胜感激。
谢谢您!
mysql 8版

oyt4ldly

oyt4ldly1#

在一种编程语言中,你可以写一个循环,并通过迭代数日来计算小时数。在sql中,可以对递归查询执行相同的操作:

with recursive cte (id, dt, minutes) as
(
  select
    id,
    date(created_at),
    case
      when dayofweek(created_at) in (1, 7) then 0
      else timestampdiff(minute, created_at, least(now(), date(created_at) + interval 1 day))
    end
  from mytable
  union all
  select
    id,
    dt + interval 1 day,
    case
      when dayofweek(dt + interval 1 day) in (1, 7) then 0
      else timestampdiff(minute, dt + interval 1 day, least(now(), dt + interval 2 day))
    end
  from cte
  where dt + interval 1 day <= curdate()
)
select id, round(sum(minutes) / 60, 1) as hours
from cte
group by id
order by id;

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a08f96bc29fb8a51302da10679496e22

相关问题