我如何使用 mysql 选择查询在“x 小时 y 分钟 z 秒”之类的词中获得 2 次之间的差异

Posted

技术标签:

【中文标题】我如何使用 mysql 选择查询在“x 小时 y 分钟 z 秒”之类的词中获得 2 次之间的差异【英文标题】:How I get difference between 2 times in words like "x hours y minutes z seconds" using mysql select query 【发布时间】:2016-08-31 05:25:10 【问题描述】:

我在一个表名中有两个时间列是 start_time 和 end_time。

我需要这些瓷砖之间的区别。例如start_time = 18:40:00end_time = 20:50:00

输出将是2 hours 10 minutes.

【问题讨论】:

Calculate difference between two datetimes in mysql的可能重复 【参考方案1】:

使用MySQL的TIMEDIFF函数

SELECT 
TIMEDIFF(end_time,start_time) AS duration
FROM your_table;

TIMEDIFF() 函数

MySQL TIMEDIFF() 返回两个时间或日期时间表达式之间的差异。需要注意的是,两个表达式必须是同一类型。

语法:

TIMEDIFF(expr1,expr2)

参数

Name    Description
expr1   A datetime value.
expr2   A datetime value.

编辑:

如果您想以文字形式获取持续时间(例如x hours y minutes z seconds):

SELECT 
CONCAT
( 
IF(HOUR(TIMEDIFF(end_time,start_time)) > 0, CONCAT(HOUR(TIMEDIFF(end_time,start_time)), ' hours'),''),
IF(MINUTE(TIMEDIFF(end_time,start_time)) > 0 , CONCAT(MINUTE(TIMEDIFF(end_time,start_time)),' minutes'),''),
IF(SECOND(TIMEDIFF(end_time,start_time)) > 0 , CONCAT(SECOND(TIMEDIFF(end_time,start_time)),' seconds'),'')
) AS duration
FROM your_table

演示:

SET @end_time := '20:50:00';
SET @start_time := '18:40:00';

SELECT 
CONCAT( 
IF(HOUR(TIMEDIFF(@end_time,@start_time)) > 0, CONCAT(HOUR(TIMEDIFF(@end_time,@start_time)), ' hours '),''),
IF(MINUTE(TIMEDIFF(@end_time,@start_time)) > 0 , CONCAT(MINUTE(TIMEDIFF(@end_time,@start_time)),' minutes '),''),
IF(SECOND(TIMEDIFF(@end_time,@start_time)) > 0 , CONCAT(SECOND(TIMEDIFF(@end_time,@start_time)),' seconds'),'')
) AS duration;

输出: 2 hours 10 minutes

【讨论】:

我需要输出 2 小时 10 分钟。 不是给你02:10:00这个吗?现在是 2 小时 10 分钟。 我知道这一点,但可以查询给我 2 小时 10 分钟格式的结果 2 小时 10 分钟 0 秒首选?或者你不想要 0 值的单词。什么? 只需要几分钟

以上是关于我如何使用 mysql 选择查询在“x 小时 y 分钟 z 秒”之类的词中获得 2 次之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

如何在查询语句 Mysql 中格式化日期?

在 PHP 中,如何创建包含引号和撇号的 mySQL 选择查询?

如何在 MySql 查询方法中写入 To 和 From 日期?

在日期之间选择mysql查询?

如何选择带有外语的mysql查询?

如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)