- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我的表有示例数据,我需要计算两列中两个时间戳之间的营业时间。营业时间:上午 9:00 至下午 5:00,忽略周六和周日,我不考虑公共(public)假期。有人可以提供一些关于如何实现这一目标的指导吗?我想要第 3 列中所述的所需输出,日期格式为:yyyy-mm-dd
Created date Updated date Business hrs
2012-03-05 9:00am 2012-03-05 3:00pm 6
2012-03-05 10:00am 2012-03-06 10:00am 9
2012-03-09 4:00pm 2012-03-19 10:00am 2
最佳答案
这个问题说公共(public)假期不应该被考虑在内,所以这个答案就是这样做的 - 计算营业时间时考虑周末,但忽略可能的公共(public)假期。
如果您需要将公共(public)假期考虑在内,您需要有一个单独的表格来列出公共(public)假期的日期,这些日期可能因年份、州与州或国家/地区而异。主要公式可能保持不变,但您需要从给定日期范围内的公共(public)假期的结果小时数中减去。
让我们用一些涵盖各种情况的示例数据创建一个表:
CREATE TABLE T (CreatedDate datetime, UpdatedDate datetime);
INSERT INTO T VALUES
('2012-03-05 09:00:00', '2012-03-05 15:00:00'), -- simple part of the same day
('2012-03-05 10:00:00', '2012-03-06 10:00:00'), -- full day across the midnight
('2012-03-05 11:00:00', '2012-03-06 10:00:00'), -- less than a day across the midnight
('2012-03-05 10:00:00', '2012-03-06 15:00:00'), -- more than a day across the midnight
('2012-03-09 16:00:00', '2012-03-12 10:00:00'), -- over the weekend, less than 7 days
('2012-03-06 16:00:00', '2012-03-15 10:00:00'), -- over the weekend, more than 7 days
('2012-03-09 16:00:00', '2012-03-19 10:00:00'); -- over two weekends
在 MS SQL Server 中,我使用以下公式:
SELECT
CreatedDate,
UpdatedDate,
DATEDIFF(minute, CreatedDate, UpdatedDate)/60.0 -
DATEDIFF(day, CreatedDate, UpdatedDate)*16 -
DATEDIFF(week, CreatedDate, UpdatedDate)*16 AS BusinessHours
FROM T
产生以下结果:
+-------------------------+-------------------------+---------------+
| CreatedDate | UpdatedDate | BusinessHours |
+-------------------------+-------------------------+---------------+
| 2012-03-05 09:00:00 | 2012-03-05 15:00:00 | 6 |
| 2012-03-05 10:00:00 | 2012-03-06 10:00:00 | 8 |
| 2012-03-05 11:00:00 | 2012-03-06 10:00:00 | 7 |
| 2012-03-05 10:00:00 | 2012-03-06 15:00:00 | 13 |
| 2012-03-09 16:00:00 | 2012-03-12 10:00:00 | 2 |
| 2012-03-06 16:00:00 | 2012-03-15 10:00:00 | 50 |
| 2012-03-09 16:00:00 | 2012-03-19 10:00:00 | 42 |
+-------------------------+-------------------------+---------------+
有效,因为在 SQL Server 中 DATEDIFF
返回指定 datepart 边界在指定 startdate 和 enddate 之间交叉的计数。
每天有 8 个工作时间。我计算两个日期之间的总小时数,然后减去午夜数乘以每天 16 个非工作时间,然后减去周末数乘以 16(周六 + 周日为 8+8 个工作时间)。
它还假设给定的开始和结束日期/时间是在工作时间内。
在 MySQL 中,最接近的等价物是 TIMESTAMPDIFF
, 但它的工作方式不同。它有效地计算秒数的差异并除以所选单位中的秒数(丢弃小数部分)。
因此,为了获得我们需要的结果,我们可以计算一些 anchor 日期时间与 CreatedDate
和 UpdatedDate
之间的 TIMESTAMPDIFF
而不是计算差异直接在 CreatedDate
和 UpdatedDate
之间。
我选择了 2000-01-03 00:00:00
,这是星期一。您可以选择任何其他星期一(或星期日,如果您的一周从星期日开始)午夜作为锚定日期。
MySQL 查询变为(参见 SQL Fiddle):
SELECT
CreatedDate,
UpdatedDate,
TIMESTAMPDIFF(MINUTE, CreatedDate, UpdatedDate)/60.0 -
16*(
TIMESTAMPDIFF(DAY, '2000-01-03',UpdatedDate)-
TIMESTAMPDIFF(DAY, '2000-01-03',CreatedDate)
) -
16*(
TIMESTAMPDIFF(WEEK, '2000-01-03',UpdatedDate)-
TIMESTAMPDIFF(WEEK, '2000-01-03',CreatedDate)
) AS BusinessHours
FROM T
关于mysql : how to calculate business hrs between two timestamps and neglect weekends,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426186/
我在 c# 中以这种方式将 Hour 转换为 12 HRS/24 HRS 格式,但无法在 javascript 中执行相同的操作。 我的 c# 代码用于格式化 12 HRS/24 HRS 格式如下 f
我正在编写一个查询,该查询选择两次并计算两次之间的差异,其中一个是开始,另一个是结束以找出持续时间。然而,两者在mysql中都设置为TIME类型。我如何格式化时间而不是将 HH:MM:SS 显示为 '
实际上我使用的是MySql 5.6.4版本。但问题是MySQL以“hh:mm:ss”格式(或“hhh:mm:ss”格式)检索并显示TIME值对于较大的小时值)。 TIME 值的范围可能是“-838:5
实际上我使用的是MySql 5.6.4版本。但问题是MySQL以“hh:mm:ss”格式(或“hhh:mm:ss”格式)检索并显示TIME值对于较大的小时值)。 TIME 值的范围可能是“-838:5
我目前正在用 Python 开发一个项目(必须自学 Python,目前仍在学习),该项目从给我的 csv 文件中获取数据。 我目前对如何遍历列表以将列表中的字符串(例如“2 小时 5 分 15 秒”)
我如何在 C# 中添加 (DateTime?) 和 (long?),其中 long 是 hrs。日期时间中的预期结果 最佳答案 DateTime dt = DateTime.Now;
我正在尝试让计时器显示以下内容 - 小时:分钟:秒:毫秒。我找到了一个介绍如何操作的网站教程,但没有显示时间。这是网站:Simple-stopwatch 这是它说要做的代码: var timer =
我是一名 C# 初学者。我正在用 MVP 编写 Web 应用程序,但无法将 12 小时制转换为 24 小时制。因此,有三个下拉框(小时、分钟、上午/下午)当 AM/PM 下拉列表显示为 PM 时,小时
Date Y 12/16/2013 7:00 104052 12/16/2013 15:00 103213 12/16/2013 23:00 104724 12/17/2013 7:
我的表有示例数据,我需要计算两列中两个时间戳之间的营业时间。营业时间:上午 9:00 至下午 5:00,忽略周六和周日,我不考虑公共(public)假期。有人可以提供一些关于如何实现这一目标的指导吗?
a) 所以我有一个巨大的 .csv 数据文件夹,其中有一个关于持续时间的列,其中单元格是“x min y sec”(例如 15 min 29 sec)或“x hrs y min z sec”(例如 1
我正在尝试使用 date-fns 库显示倒数计时器并按照以下方式执行操作,但无法在 react 中找到解决方案。 预期输出:60 天:8 小时:9 分钟:剩余 5 秒 const finish
我需要在每个 zip 中显示最高的 num_add 及其相关的 hrs 分数。 所以 hrs 在每个 zip 中有多个值和 num_add。 如何在每个 zip 中只显示最高的 num_add 及其
我正在使用highcharts 。我有一个分组的堆积条形图,其中包含两个系列的收入和小时数,以及计费/未计费的堆积系列。我想在条形图上显示缩写为 K/M 的小时标签,货币条形图也是如此(但数字前面有“
我需要一种方法来在 crontab 上创建一个在 24 小时内只执行一次脚本的条目。 步骤: 运行 bash 脚本以配置 crontab 以在 24 小时内运行脚本(使用命令 date?)。这将仅在
在我的程序中,我需要以特定格式(2015-11-18 12:23:00)提醒当前日期和时间,所以我这样写 var date = new Date(); alert(date
我在 MySQL 数据库中有一个表,它使用 UTC 时间戳注册特定用户的事件。我想创建一个新列,并将 2:30hrs 添加到记录的所有事件的时间中。该表有多列。 例如:- date
我是一名优秀的程序员,十分优秀!