MySQL:计算两个日期列之间的工作日差异

时间:2012-11-12 21:56:48

标签: mysql sql

我的sql查询返回两列,第一列是“创建日期”,第二列是“更新日期”,第一列具有相对于第二列的先前时间戳。

我需要添加第三列,可以显示工作日(上午9:00到下午5:00)响应,即创建日期是2012-01-04 09:00:20,“更新日期”是下午4:00当天第三栏应显示7小时

如果创建的日期是2012-01-04 16:00:20(下午4:00),并且“更新日期”是2012年01:05(1月2日)的10:00m,则第三列应显示2小时。< / p>

它应该排除星期六和星期日。

请为此建议适当的SQL查询。

1 个答案:

答案 0 :(得分:1)

作为@Gordon Linoff commented,您需要创建一个包含营业时间的表格:

CREATE TABLE business_days (
  start DATETIME NOT NULL,
  end   DATETIME NOT NULL
);

INSERT INTO `business_days`
  (start, end)
VALUES
  ('2011-12-30 09:00', '2011-12-30 15:00'),  -- short day
  ('2012-01-03 09:00', '2012-01-03 17:00'),  -- 31st, 1st were Sat/Sun
  ('2012-01-04 09:00', '2012-01-04 17:00'),  -- 2nd was a public holiday
  ('2012-01-05 09:00', '2012-01-05 17:00'),
  -- etc.

然后你可以这样做:

SELECT   m.*,
         SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(
           LEAST(m.updated, b.end),
           GREATEST(m.created, b.start)
         ))))
FROM     my_table m JOIN business_days b
           ON b.start < m.updated AND m.created < b.end
GROUP BY m.created, m.updated  -- or some other key into my_table

sqlfiddle上查看。