是否可以在几分钟内计算一笔金额,但不能在2300和0700之间的特定时间之间计算
SELECT SUM( TIMESTAMPDIFF(MINUTE, open_time, close_time))
FROM requests;
我上面的代码以分钟为单位计算时间,但也计算一夜之间,这是我想要避免的。
感谢您的帮助,我根本不是SQL专业人员!
答案 0 :(得分:0)
尝试以下方法。它也应该适用于超过一个晚上的时期。
SELECT SUM( TIMESTAMPDIFF(MINUTE, open_time, close_time) - (DATEDIFF(close_time, open_time) * 480))
FROM requests;
答案 1 :(得分:0)
我不知道任何会返回指定结果的内置函数。而且我不知道任何可以处理所有可能情况的简单表达。
另一种方法是定义一个能够计算差异的函数(MySQL存储程序)。
举个例子,如果我们完全忽略日期时间/时间戳的任何“秒”部分,并使用整个分钟,就像这样:
注意:这是未完全测试。 (考虑处理夏令时变化的开/关。这可能工作得很好,但尚未经过测试。这只是一种可能方法的演示。
SELECT t.open_time
, t.close_time
, worktimeminutes(t.open_time,t.close_time) AS worktimeminutes
, TIMESTAMPDIFF(MINUTE,t.open_time,t.close_time) AS tsdiff
FROM ( SELECT NULL AS open_time, NULL AS close_time
UNION ALL SELECT '2016-02-16 11:00', '2016-02-16 21:00'
UNION ALL SELECT '2016-02-16 21:00', '2016-02-16 23:15'
UNION ALL SELECT '2016-02-16 22:00', '2016-02-17 01:10'
UNION ALL SELECT '2016-02-16 23:15', '2016-02-17 01:12'
UNION ALL SELECT '2016-02-16 22:00', '2016-02-17 08:30'
UNION ALL SELECT '2016-02-16 23:30', '2016-02-17 08:30'
UNION ALL SELECT '2016-02-16 23:30', '2016-02-18 08:30'
) t
使用MySQL中定义的函数,我们可以运行一些简单的测试用例。我们可以在SELECT语句中引用该函数,就像内置函数一样。
open_time close_time worktimeminutes tsdiff
---------------- ---------------- --------------- --------
(NULL) (NULL) (NULL) (NULL)
2016-02-16 11:00 2016-02-16 21:00 600 600
2016-02-16 21:00 2016-02-16 23:15 120 135
2016-02-16 22:00 2016-02-17 01:10 60 190
2016-02-16 23:15 2016-02-17 01:12 0 117
2016-02-16 22:00 2016-02-17 08:30 150 630
2016-02-16 23:30 2016-02-17 08:30 90 540
2016-02-16 23:30 2016-02-18 08:30 1050 1980
返回:
{{1}}