- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在 MySQL 表上使用 TimeDiff 来获取 2 个字段之间的差异,这两个字段均采用 DateTime 格式。这是我正在使用的查询,它也将持续时间限制为仅今年。
SELECT username, CONCAT(
FLOOR(SUM(HOUR(TIMEDIFF(end_time, start_time)) / 24)), ' days ',
MOD(HOUR(TIMEDIFF(end_time, start_time)), 24), ' hours ',
MINUTE(TIMEDIFF(end_time, start_time)), ' minutes')
AS duration
FROM table
WHERE start_time > CONCAT(YEAR(CURDATE()) -1, '-12-31')
GROUP BY username
我遇到的问题是,我一直难以弄清楚如何从结果中排除周末。有人可以帮忙吗?
最佳答案
出于示例的目的,我们使用静态 @start
和 @end
日期,但实际上您可以将它们替换为您的列名,所有这些值都将是每行重新计算。
SET @start = '2012-09-30';
SET @end = '2012-11-03';
SELECT
@raw_days := DATEDIFF(@end, @start)+1 'raw_days',
@full_weeks := FLOOR(@raw_days / 7) 'full_weeks',
@odd_days := @raw_days - @full_weeks * 7 'odd_days',
@wday_start := DAYOFWEEK(@start) 'wday_start',
@wday_end := DAYOFWEEK(@end) 'wday_end',
@weekend_intrusion := @wday_start + @odd_days 'weekend_intrusion',
@extra_weekends :=
IF(@wday_start = 1, IF(@odd_days = 0, 0, 1),
IF(@weekend_intrusion > 7, 2,
IF(@weekend_intrusion > 6, 1, 0)
)
) 'extra_weekends',
@total_weekends := @full_weeks * 2 + @extra_weekends 'total_weekends',
@total_workdays := @raw_days - @total_weekends 'total_workdays'
IF
语句归结为:
如果一周从星期日开始,并且没有“奇数”日,那么就没有额外的周末。如果有 奇数天,则只能有 1 个周末,因为它不可能延伸到星期六,因为那将是一个“完整”的一周。
否则,我们将查看一周的剩余部分是否会延续到周日之后。如果是这样,请添加 2 个周末。否则,如果该部分到星期六,则添加 1 个周末。否则为 0。
输出:
+----------+------------+----------+------------+----------+-------------------+----------------+----------------+----------------+
| raw_days | full_weeks | odd_days | wday_start | wday_end | weekend_intrusion | extra_weekends | total_weekends | total_workdays |
+----------+------------+----------+------------+----------+-------------------+----------------+----------------+----------------+
| 34 | 4 | 6 | 1 | 6 | 7 | 1 | 9 | 25 |
+----------+------------+----------+------------+----------+-------------------+----------------+----------------+----------------+
关于MySQL TimeDiff 排除周末,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13312535/
我想了解为什么这个查询给我一个错误的答案: 此查询会将其格式化为时间,然后在 time_format 内我创建了一个 timediff在 2 个日期之间,我只有小时数。 SELECT time_fo
$arr = explode(':', $row['diff']); echo "$arr[0] minutes, $arr[1] seconds"; 数组正在输出:Array00 小时,20 分钟,
我必须在mysql的时间差异中使用一个条件。我必须修改以下查询:- select bugs_team_user_view.bug_id, bugs_team_user_view.creation_
投诉创建日期:2014-09-16T18:41:42.000Z 投诉截止日期:2014-09-17T10:41:42.000Z 如果投诉在创建日期后的第二天关闭,它将跳过(晚上 7 点至上午 10 点
我的查询是我想用 timediff 函数找到总和任何帮助 SELECT TIMEDIFF( timefrom, timeto ) FROM `leaveapply` WHERE userid = '2
我正在尝试设置一个查询,根据一列中最后一个唯一值出现的时间,在两次之间执行DATEDIFF。数据结构如下: row ticket_id create_time change_ti
所以我在涉及 timediff 函数的查询中遇到了性能问题。 对于 session 表(PK)中的每个 id 寄存器,study_behaviour 表中都有多个寄存器(idsession 是来自 S
Query Ouput 从输出中,您可以看到我可以选择MIN(TIME(Time)),但是当我在TIMEDIFF FUNCTION中使用它时,它会读取 MIN(TIME(Time)) 为 0,我得到的
这必须返回 1440 分钟并且工作正常: select abs(round((TIME_TO_SEC(TIMEDIFF('2013-03-13 10:00',
请考虑以下查询: SELECT submitted_time FROM jobs WHERE timediff(NOW(), submitted_time) DATE_ADD(NOW(), INTE
我的商店中有 500 个信息亭,并且有一个表可以通过商店 ID 跟踪每个打印件的时间戳。我需要生成一个记录集,以秒为单位给出打印之间的时间。所有这些数据都存储在一个表中。每次打印都会插入一条记录,其中
我需要计算一行与字段 dateCompleted 是该行之前最后一个字段的行之间的 TIMEDIFF,然后获取值 timeSinceLast。 我可以通过子查询轻松完成此操作,但速度非常慢。 (比直接
我一直在 MySQL 表上使用 TimeDiff 来获取 2 个字段之间的差异,这两个字段均采用 DateTime 格式。这是我正在使用的查询,它也将持续时间限制为仅今年。 SELECT userna
我在使用具有两个不同日期的 TIMEDIFF 时遇到问题。以下查询“应该”返回00:04:51 mysql> SELECT TIMEDIFF(TIME('2013-07-21 00:04:50'),T
我有一个查询,需要它从两个单独的表中选择两个不同时间的平均时差。 在查询的下一部分出现之前,这似乎很容易:我必须按学生进入办公室的原因进行分组。所以现在这个查询需要: 选择原因(why) 计算一个学生
我有两个字段: 初始(时间戳) 最终(时间戳) 我的查询是: SELECT TIMEDIFF(Final, Initial) AS 'Worked Hours' FROM `db_fo
timediff 函数没有按预期工作。在以下示例中,我尝试计算 1 年期间的秒数差异。 mysql>SELECT 366*24*60*60 AS expected; +----------+ | ex
Mysql Timediff 函数不适用于我的长日期。实际上我需要获取 date_time 字段与 now() 之间的时差 所以我用了这个查询 SELECT `date_time`,now(),tim
帮助。我在mysql中有这个查询。它的作用是组合三个表中的字段。其中一个字段(持续时间 (h))减去结束时间和开始时间。 5月时间数据仅采用时间形式,而不是日期时间。所以我决定使用timediff函数
我有一个 SQL 表事件,其中包含两个名为started_at、ended_at 的字段,每个字段都是一个日期时间列和一个plane_id 字段。 我们将间隔“end_at -start_at”称为持
我是一名优秀的程序员,十分优秀!