在MySQL中如何计算时间?

在MySQL中如何计算时间?,mysql,Mysql,正如您在图中所看到的,我有一份停机报告,显示选定工厂在选定日期的停机时间。现在,我想添加“时间持续时间”列中的所有值,并将其显示在“总时间持续时间”附近的单独显示器中。例如,在图中,所选日期为2015年3月17日和2015年3月30日,所选工厂为生料工厂。该报告显示了所选13天内生料磨机的停机时间。我想将这13天的所有时间添加到“时间持续时间”列中,并在“总时间持续时间”附近的单独显示屏中显示。时间格式为HH:MM:SS。我该怎么做 步骤: mysql> SELECT CAST(SUM(t


正如您在图中所看到的,我有一份停机报告,显示选定工厂在选定日期的停机时间。现在,我想添加
“时间持续时间”
列中的所有值,并将其显示在
“总时间持续时间”
附近的单独显示器中。例如,在图中,所选日期为2015年3月17日和2015年3月30日,所选工厂为生料工厂。该报告显示了所选13天内生料磨机的停机时间。我想将这13天的所有时间添加到
“时间持续时间”
列中,并在
“总时间持续时间”
附近的单独显示屏中显示。时间格式为HH:MM:SS。我该怎么做

步骤

mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
    ->        SELECT CAST('01:08:00' AS TIME) time_duration
    ->        UNION
    ->        SELECT CAST('00:39:00' AS TIME)
    -> ) date_range_results;
+---------------------+
| total_time_duration |
+---------------------+
| 01:47:00            |
+---------------------+
1 row in set (0.00 sec)

mysql>
  • 获取给定日期范围的
    持续时间
  • 将所有
    持续时间
    值相加
  • 将结果转换回
    时间
    ,它只不过是
    总持续时间
  • 示例

    mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
        ->        SELECT CAST('01:08:00' AS TIME) time_duration
        ->        UNION
        ->        SELECT CAST('00:39:00' AS TIME)
        -> ) date_range_results;
    +---------------------+
    | total_time_duration |
    +---------------------+
    | 01:47:00            |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql>
    

    步骤

    mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
        ->        SELECT CAST('01:08:00' AS TIME) time_duration
        ->        UNION
        ->        SELECT CAST('00:39:00' AS TIME)
        -> ) date_range_results;
    +---------------------+
    | total_time_duration |
    +---------------------+
    | 01:47:00            |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql>
    
  • 获取给定日期范围的
    持续时间
  • 将所有
    持续时间
    值相加
  • 将结果转换回
    时间
    ,它只不过是
    总持续时间
  • 示例

    mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
        ->        SELECT CAST('01:08:00' AS TIME) time_duration
        ->        UNION
        ->        SELECT CAST('00:39:00' AS TIME)
        -> ) date_range_results;
    +---------------------+
    | total_time_duration |
    +---------------------+
    | 01:47:00            |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql>
    

    步骤

    mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
        ->        SELECT CAST('01:08:00' AS TIME) time_duration
        ->        UNION
        ->        SELECT CAST('00:39:00' AS TIME)
        -> ) date_range_results;
    +---------------------+
    | total_time_duration |
    +---------------------+
    | 01:47:00            |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql>
    
  • 获取给定日期范围的
    持续时间
  • 将所有
    持续时间
    值相加
  • 将结果转换回
    时间
    ,它只不过是
    总持续时间
  • 示例

    mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
        ->        SELECT CAST('01:08:00' AS TIME) time_duration
        ->        UNION
        ->        SELECT CAST('00:39:00' AS TIME)
        -> ) date_range_results;
    +---------------------+
    | total_time_duration |
    +---------------------+
    | 01:47:00            |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql>
    

    步骤

    mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
        ->        SELECT CAST('01:08:00' AS TIME) time_duration
        ->        UNION
        ->        SELECT CAST('00:39:00' AS TIME)
        -> ) date_range_results;
    +---------------------+
    | total_time_duration |
    +---------------------+
    | 01:47:00            |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql>
    
  • 获取给定日期范围的
    持续时间
  • 将所有
    持续时间
    值相加
  • 将结果转换回
    时间
    ,它只不过是
    总持续时间
  • 示例

    mysql> SELECT CAST(SUM(time_duration) AS TIME) AS total_time_duration FROM (
        ->        SELECT CAST('01:08:00' AS TIME) time_duration
        ->        UNION
        ->        SELECT CAST('00:39:00' AS TIME)
        -> ) date_range_results;
    +---------------------+
    | total_time_duration |
    +---------------------+
    | 01:47:00            |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql>
    

    使用以下查询:

    SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration))) FROM TableName AS 'TOTAL TIME DURATION';
    
    但是,有时总持续时间可能超过允许的最大时间值,即“838:59:59”。因此,您通常可以使用以下查询来计算溢出总和:

    SELECT CONCAT_WS(' hours and ',
      ((SUM(TIME_TO_SEC(Time_Duration)) DIV (TIME_TO_SEC('838:59:59')+1))*839), 
      (SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration)) MOD (TIME_TO_SEC('838:59:59')+1))) 
    ) 
    FROM TableName AS 'TOTAL TIME DURATION'
    
    这将以以下形式提供输出:

    3 hours and 3:45:05
    
    您还可以使用以下自定义查询以所需的精确格式获取结果,例如
    6:45:05

    SELECT CONCAT_WS(
        ':', 
        (SUM(TIME_TO_SEC(Time_Duration)) DIV 3600, 
        (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) DIV 60, 
        (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) MOD 60)
    FROM TableName AS 'TOTAL TIME DURATION';
    

    使用以下查询:

    SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration))) FROM TableName AS 'TOTAL TIME DURATION';
    
    但是,有时总持续时间可能超过允许的最大时间值,即“838:59:59”。因此,您通常可以使用以下查询来计算溢出总和:

    SELECT CONCAT_WS(' hours and ',
      ((SUM(TIME_TO_SEC(Time_Duration)) DIV (TIME_TO_SEC('838:59:59')+1))*839), 
      (SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration)) MOD (TIME_TO_SEC('838:59:59')+1))) 
    ) 
    FROM TableName AS 'TOTAL TIME DURATION'
    
    这将以以下形式提供输出:

    3 hours and 3:45:05
    
    您还可以使用以下自定义查询以所需的精确格式获取结果,例如
    6:45:05

    SELECT CONCAT_WS(
        ':', 
        (SUM(TIME_TO_SEC(Time_Duration)) DIV 3600, 
        (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) DIV 60, 
        (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) MOD 60)
    FROM TableName AS 'TOTAL TIME DURATION';
    

    使用以下查询:

    SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration))) FROM TableName AS 'TOTAL TIME DURATION';
    
    但是,有时总持续时间可能超过允许的最大时间值,即“838:59:59”。因此,您通常可以使用以下查询来计算溢出总和:

    SELECT CONCAT_WS(' hours and ',
      ((SUM(TIME_TO_SEC(Time_Duration)) DIV (TIME_TO_SEC('838:59:59')+1))*839), 
      (SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration)) MOD (TIME_TO_SEC('838:59:59')+1))) 
    ) 
    FROM TableName AS 'TOTAL TIME DURATION'
    
    这将以以下形式提供输出:

    3 hours and 3:45:05
    
    您还可以使用以下自定义查询以所需的精确格式获取结果,例如
    6:45:05

    SELECT CONCAT_WS(
        ':', 
        (SUM(TIME_TO_SEC(Time_Duration)) DIV 3600, 
        (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) DIV 60, 
        (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) MOD 60)
    FROM TableName AS 'TOTAL TIME DURATION';
    

    使用以下查询:

    SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration))) FROM TableName AS 'TOTAL TIME DURATION';
    
    但是,有时总持续时间可能超过允许的最大时间值,即“838:59:59”。因此,您通常可以使用以下查询来计算溢出总和:

    SELECT CONCAT_WS(' hours and ',
      ((SUM(TIME_TO_SEC(Time_Duration)) DIV (TIME_TO_SEC('838:59:59')+1))*839), 
      (SEC_TO_TIME(SUM(TIME_TO_SEC(Time_Duration)) MOD (TIME_TO_SEC('838:59:59')+1))) 
    ) 
    FROM TableName AS 'TOTAL TIME DURATION'
    
    这将以以下形式提供输出:

    3 hours and 3:45:05
    
    您还可以使用以下自定义查询以所需的精确格式获取结果,例如
    6:45:05

    SELECT CONCAT_WS(
        ':', 
        (SUM(TIME_TO_SEC(Time_Duration)) DIV 3600, 
        (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) DIV 60, 
        (SUM(TIME_TO_SEC(Time_Duration)) MOD 3600) MOD 60)
    FROM TableName AS 'TOTAL TIME DURATION';
    


    没用。即使日期改变,它也显示相同的值“838:59:59”。我使用了它。MySQL查询浏览器获取了10000多行,几乎所有行都显示为0小时和00:00:00,而有些行显示为-->0小时和00:00:12或任何介于0和59之间的值,以代替12请再次检查,我已重新更新。我忘记了第二个查询中所有值的总和。它显示“31小时和657:16:23”。这意味着什么?它不能仅仅是657小时,因为表中有10000多个值..不起作用。即使日期改变,它也显示相同的值“838:59:59”。我使用了它。MySQL查询浏览器获取了10000多行,几乎所有行都显示为0小时和00:00:00,而有些行显示为-->0小时和00:00:12或任何介于0和59之间的值,以代替12请再次检查,我已重新更新。我忘记了第二个查询中所有值的总和。它显示“31小时和657:16:23”。这意味着什么?它不能仅仅是657小时,因为表中有10000多个值..不起作用。即使日期改变,它也显示相同的值“838:59:59”。我使用了它。MySQL查询浏览器获取了10000多行,几乎所有行都显示为0小时和00:00:00,而有些行显示为-->0小时和00:00:12或任何介于0和59之间的值,以代替12请再次检查,我已重新更新。我忘记了第二个查询中所有值的总和。它显示“31小时和657:16:23”。这意味着什么?它不能仅仅是657小时,因为表中有10000多个值..不起作用。即使日期改变,它也显示相同的值“838:59:59”。我使用了它。MySQL查询浏览器获取了10000多行,几乎所有行都显示为0小时和00:00:00,而有些行显示为-->0小时和00:00:12或任何介于0和59之间的值,以代替12请再次检查,我已重新更新。我忘记了第二个查询中所有值的总和。它显示“31小时和657:16:23”。这意味着什么?它不可能只有657小时,因为表中有10000多个值..我不能这样添加。因为日期更改时,值会不断更改changed@Ram:无论输入日期是否更改,您的脚本语言应该使用
    日期范围结果的输出
    持续时间进行求和
    以填充UI中的
    总持续时间
    框。@Ram:仅适用于介于
    19
    总持续时间s之间的日期