CREATE  TABLE IF NOT EXISTS `csf`.`csf_cmp_runtime` (
  `cmp_id` INT NOT NULL ,
  `csf_begin_time` DATETIME NULL COMMENT '运行 存储过程csf.proc_tmp_data起始时间\n' ,
  `csf_end_time` DATETIME NULL COMMENT '运行 存储过程csf.proc_tmp_data结束时间\n' ,
  `csfpub_begin_time` DATETIME NULL COMMENT '运行 存储过程csf.proc_pub_data开始时间\n' ,
  `csfpub_end_time` DATETIME NULL COMMENT '运行 存储过程csf.proc_pub_data结束时间\n' ,
  `all_time` VARCHAR(16) NULL COMMENT '运行所有后台excel的总时间。' ,
  PRIMARY KEY (`cmp_id`) )
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COMMENT = '记录一家公司excel执行后台存储过程所花费的时间'; 
 
insert into  `csf`.`csf_cmp_runtime`
select 322, '2011-01-10 12:23:56','2011-01-10 12:33:46','2011-01-10 12:29:46','2011-01-10 12:33:56','';
 
select (csf_end_time-csf_begin_time) csf, (csfpub_end_time-csfpub_begin_time) csf_pub 
from csf.csf_cmp_runtime;
 
 -- 得出结果如下
 990.000000, 410.000000
-- 发现不是我要的结果,我想知道两个时间想减得出 9分50秒 类似的结果,这个如何搞? 我有个思路就是用second函数和minute函数取得分别的分和秒数,然后再做加减运算,这种方法需要写存储过程,我觉得有点麻烦,大家提供一个比较简便的方案吧!

解决方案 »

  1.   


    mysql> select * from csf_cmp_runtime;
    +--------+---------------------+---------------------+---------------------+----
    -----------------+----------+
    | cmp_id | csf_begin_time      | csf_end_time        | csfpub_begin_time   | csf
    pub_end_time     | all_time |
    +--------+---------------------+---------------------+---------------------+----
    -----------------+----------+
    |    322 | 2011-01-10 12:23:56 | 2011-01-10 12:33:46 | 2011-01-10 12:29:46 | 201
    1-01-10 12:33:56 |          |
    +--------+---------------------+---------------------+---------------------+----
    -----------------+----------+
    1 row in set (0.00 sec)mysql> select SEC_TO_TIME(TIME_TO_SEC(csf_end_time)-TIME_TO_SEC(csf_begin_time))
     csf,SEC_TO_TIME(TIME_TO_SEC(csfpub_end_time)-TIME_TO_SEC(csfpub_begin_time)) csf_pub
     from csf_cmp_runtime;
    +----------+----------+
    | csf      | csf_pub  |
    +----------+----------+
    | 00:09:50 | 00:04:10 |
    +----------+----------+
    1 row in set (0.00 sec)
      

  2.   

    用sec_to_time,time_to_sec 函数即可.
      

  3.   

    这样开始结束时间跨天就不太好使吧
    把time_to_sec 换成TIMESTAMPDIFF(second,now(),'2011-01-10 15:00')
      

  4.   

    的确,用sec_to_time,time_to_sec 函数
    SEC_TO_TIME(seconds) Returns the seconds argument, converted to hours, minutes, and seconds, as a TIME value. The range of the result is constrained to that of the TIME data type. A warning occurs if the argument corresponds to a value outside that range. mysql> SELECT SEC_TO_TIME(2378);
            -> '00:39:38'
    mysql> SELECT SEC_TO_TIME(2378) + 0;
            -> 3938TIME_TO_SEC(time) Returns the time argument, converted to seconds. mysql> SELECT TIME_TO_SEC('22:23:00');
            -> 80580
    mysql> SELECT TIME_TO_SEC('00:39:38');
            -> 2378
      

  5.   

    select timediff(csf_end_time,csf_begin_time) from csf_cmp_runtime
    这样也可以