- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试找出时钟查询中的错误。闯关时间为中午 12 点,突破时间为中午 12:30。我在 mysql 中使用 timediff 计算差异。我将突破时间和突破时间传递给 timediff 函数。它返回正确的分钟,但它也返回 -12 小时。当我在 timediff 函数中交换 breakin 和 breakout 时,它会返回正值 12 小时和正确的分钟数。
我想有人可能想查看查询。警告:它又大又丑。查询:
SELECT CONCAT(pe.first, ' ', pe.last) AS Name,
U.EmpID AS 'Empl ID',
DATE_FORMAT(U.`time`, '%m-%d-%Y') AS 'Punch Date',
DATE_FORMAT(U.`time`, '%W') AS 'Weekday',
TIME_FORMAT(SEC_TO_TIME(SUM(U.delta)), '%H:%i') AS 'Time Worked',
TIME_FORMAT(
TIMEDIFF(
(SELECT PunchDateTime
FROM timeclock_punchlog tp
WHERE PunchEvent = 'breakout'
AND DATE(tp.PunchDateTime) = DATE(U.time)
AND tp.EmpID = U.EmpID),
(SELECT PunchDateTime
FROM timeclock_punchlog tp
WHERE PunchEvent = 'breakin'
AND DATE(tp.PunchDateTime) = DATE(U.time)
AND tp.EmpID = U.EmpID)),
'%h hrs, %i min.')
AS Lunch
FROM ((SELECT `enter`.EmpID,
`enter`.PunchDateTime AS `time`,
DATE_FORMAT(`enter`.PunchDateTime, '%m-%d-%Y')
AS 'Punch Date',
TIMESTAMPDIFF(SECOND,
`enter`.PunchDateTime,
'2003-05-01 00:00:00')
AS `delta`
FROM timeclock_punchlog AS `enter`
WHERE `enter`.`In-Out` = 1)
UNION
(SELECT `leave`.EmpID,
`leave`.PunchDateTime AS `time`,
DATE_FORMAT(`leave`.PunchDateTime, '%m-%d-%Y')
AS 'Punch Date',
-TIMESTAMPDIFF(SECOND,
`leave`.PunchDateTime,
'2003-05-01 00:00:00')
AS `delta`
FROM timeclock_punchlog AS `leave`
WHERE `leave`.`In-Out` = 0)) AS U
LEFT JOIN prempl pe ON u.EmpID = pe.prempl
WHERE DATE(U.`time`) >= "2015-10-05"
AND DATE(U.`time`) <= "2015-10-07"
AND U.EmpID = 0349
GROUP BY date(U.`time`), EmpID
ORDER BY U.EmpID, U.`time` ASC
这是一个 SQL Fiddle通过简单的查询重现问题。
insert into times values
('12:30 pm','12:00 pm'),
('12:00 pm','12:30 pm');
select time_format(timediff(start,end),'%h hrs, %i min.') from times
结果:
12 hrs, 30 min.
-12 hrs, 30 min.
这是一个使用 datetime 类型的 sql fiddle 并产生相同的结果。 http://sqlfiddle.com/#!9/9fb73/1
最佳答案
问题在于格式化时间;看看差异是否为负,你就会遇到这样的麻烦。
time_format
也有一些限制,我建议阅读有关它的 MySQL 文档。
根据上次沟通;我假设您使用的是 datetime
数据类型,那么以下查询将起作用。
CREATE TABLE `times` (
`PunchID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`breakout` datetime NOT NULL,
`breakin` datetime NOT NULL,
PRIMARY KEY (`PunchID`)
);
insert into `times`
values (1,'2015-10-06 12:00:00', '2015-10-06 12:30:00');
选择查询(注意格式字符串h
更改为H
)
select time_format(timediff(breakin,breakout),'%H hrs, %i min.') from times;
一切正常。
如果您不确定哪个列可能比其他列具有更大的值(value),请执行 timediff
并格式化它可以给您带来奇怪的结果,最好使用 UNIX_TIMESTAMP()
在这种情况下进行整数数学运算。
关于mysql timediff 关闭 12 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32996567/
我想了解为什么这个查询给我一个错误的答案: 此查询会将其格式化为时间,然后在 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”称为持
我是一名优秀的程序员,十分优秀!