我在MySQL中有一个时间戳," date_taken"它有yyyy-mm-dd hh:mm:ss格式。我希望在午夜(00:00:00)和date_taken之间得到hh:mm:ss格式的时差。
例如:if" date_taken"是2014-11-28 16:30:30,我想从午夜07:30:30获得差异。
我使用了以下内容:
SELECT TIMESTAMPDIFF(HOUR, '00:00:00',date('H:i:s', strtotime('date_taken'))) * FROM `table`
当然似乎没有用。我是MySQL的初学者,所以请耐心等待。
此外,这种差异将在我的网站上用作反向计数器。
答案 0 :(得分:2)
有点麻烦,但它有效:
set @ft = now() -- Just for testing
select @ft
, timediff(cast(date_add(date(@ft), interval +1 day) as datetime), @ft);
结果:
+---------------------+-----------------------------------------------------------------------+
| @ft | timediff(cast(date_add(date(@ft), interval +1 day) as datetime), @ft) |
+---------------------+-----------------------------------------------------------------------+
| 2014-11-27 18:35:33 | 05:24:27 |
+---------------------+-----------------------------------------------------------------------+
解释:
@ft
:只是一个测试变量。用你想要的字段替换它date_add(date(@ft), interval +1 day)
:将值截断为日期(即删除时间部分)并添加一天cast(date_add(date(@ft), interval +1 day) as datetime)
将新日期作为日期时间投放(例如:使用提供的值,cast(date_add(date(@ft), interval +1 day) as datetime)
将为2014-11-28 00:00:00
。timediff()
只计算输入值与新日期时间之间的差异希望这有帮助
卫生署!!!!一个更简单的解决方案:
set @ft = now() -- Just for testing
select @ft, timediff('24:00:00', time(@ft));
结果:
+---------------------+---------------------------------+
| @ft | timediff('24:00:00', time(@ft)) |
+---------------------+---------------------------------+
| 2014-11-27 18:35:33 | 05:24:27 |
+---------------------+---------------------------------+
用您期望的值/字段<{1}}替换@ft
中的select
(我认为不需要解释;))
答案 1 :(得分:1)
SELECT TIMEDIFF('24:00:00','07:30:30');
+---------------------------------+
| TIMEDIFF('24:00:00','07:30:30') |
+---------------------------------+
| 16:29:30 |
+---------------------------------+
SELECT TIMEDIFF('24:00:00','16:30:00');
+---------------------------------+
| TIMEDIFF('24:00:00','16:30:00') |
+---------------------------------+
| 07:30:00 |
+---------------------------------+
所以,一个有效的例子......
SELECT * FROM users;
+-----+---------+---------------------+
| uid | Version | install_time |
+-----+---------+---------------------+
| 1 | 1 | 2014-11-28 04:38:41 |
| 1 | 2 | 2014-11-28 14:50:27 |
| 1 | 3 | 2014-11-28 17:15:05 |
| 2 | 3 | 2014-11-28 16:07:34 |
| 3 | 2 | 2014-11-28 12:50:42 |
| 4 | 4 | 2014-11-28 00:55:37 |
+-----+---------+---------------------+
SELECT TIMEDIFF('24:00:00',TIME(install_time))x FROM users;
+----------+
| x |
+----------+
| 19:21:19 |
| 09:09:33 |
| 06:44:55 |
| 07:52:26 |
| 11:09:18 |
| 23:04:23 |
+----------+
答案 2 :(得分:1)
您可以尝试使用SUBTIME减去时间,使用DATE_FORMAT设置每个日期的格式。
e.g:
SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');
-> '2007-12-30 22:58:58.999997'
SELECT SUBTIME(DATE_FORMAT('date_taken', '%Y-%d-%m %H:%i:%s'),DATE_FORMAT('date_taken', '%Y-%d-%m'));
(未测试的)
那应该从同一天的午夜减去一个完整的yyyy-mm-dd hh:mm:ss日期。
date()和strtotime()不是MySQL函数 - 它们是php函数。您可以在mysql查询中使用UNIX_TIMESTAMP而不是strtotime(),但您需要确保时区相同。