数据库中有一个表TEST,有三个字段START_TIME, END_TIME, DURATION
如果统计持续中,END_TIME, DURATION字段的值都是默认值0
想要的结果是开始时间为标准许时间,结束时间如果未结束显示“持续中”,已结束就显示结束时间,持续时间显示成“xx天xx小时xx分钟xx秒”的形式,已结束就用END_TIME-START_TIME计算,持续中就用当前时间-START_TIME计算,最大单位为0的不显示例子:
START_TIME        END_TIME        DURATION
1214007692        1214132727      125035
1214094831        1214132727      37896
1214131150        1214132727      1577
1214132551        1214132727      176
1214007692        0               0
1214094831        0               0
1214131150        0               0
1214132551        0               0假设当前时间为“2008-06-22 19:05:27”,取出的结果为:
开始时间                   结束时间                  持续时间
2008-06-21 08:21:32        2008-06-22 19:05:27       1天10小时43分钟55秒
2008-06-22 08:33:51        2008-06-22 19:05:27       10小时31分钟36秒
2008-06-22 18:39:10        2008-06-22 19:05:27       26分钟17秒
2008-06-22 19:02:31        2008-06-22 19:05:27       2分钟56秒
2008-06-21 08:21:32        持续中                    1天10小时43分钟55秒
2008-06-22 08:33:51        持续中                    10小时31分钟36秒
2008-06-22 18:39:10        持续中                    26分钟17秒
2008-06-22 19:02:31        持续中                    2分钟56秒对SQL不熟,请大家帮忙实现,谢谢

解决方案 »

  1.   

    select START_TIME,if(END_TIME=0,'持续中',END_TIME),if(END_TIME=0,now()-START_TIME,END_TIME-START_TIME)
    from test.
        [align=center]====  ====
    [/align]
    .
    贴子分数<20:对自已的问题不予重视。
    贴子大量未结:对别人的回答不予尊重。
    .
      

  2.   

    推荐你看一下这些帮助
    SQL 1992
    MySQL 5.1 Reference Manual
    数据库系统概论PPT.
        [align=center]====  ====
    [/align]
    .
    贴子分数<20:对自已的问题不予重视。
    贴子大量未结:对别人的回答不予尊重。
    .
      

  3.   

    1天
    DATEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32')
    10小时
    DATE_FORMAT('2008-06-22 19:05:27', '%H')-DATE_FORMAT('2008-06-21 08:21:32', '%H')
    43分钟
    DATE_FORMAT('2008-06-22 19:05:27', '%i')-DATE_FORMAT('2008-06-21 08:21:32', '%i')
    55秒
    DATE_FORMAT('2008-06-22 19:05:27', '%S')-DATE_FORMAT('2008-06-21 08:21:32', '%S')
    判断各部份是否为0,如为0,去掉,再CONCAT,加止单位
      

  4.   

    用IF函数判断,再用CONCAT连接
      

  5.   

    纠正:
    1天
    DATEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32') 天数
    TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'):小时、分、秒select concat(day,sj1,fz,sec) from (
    select 
    concat(if(DATEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32')>0,
    DATEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'),''),'天') as day
    ,
    TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32') as sj,
    concat(substring_index(TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'),':',1),'时') as sj1,
    concat(substring_index(
    substring_index(TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'),':',2),':',-1),'分') as fz,
    concat(substring_index(TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'),':',-1),'秒') as sec
    ) a自行优化
      

  6.   

    我要的主要是计算的秒数如何转换为“1天10小时43分钟55秒”这种形式:select concat(day,sj1,fz,sec) from (
    if(DATEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32')>0,
    concat(DATEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'),'天'),'') as day
    ,
    TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32') as sj,
    concat(substring_index(TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'),':',1),'时') as sj1,
    concat(substring_index(
    substring_index(TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'),':',2),':',-1),'分') as fz,
    concat(substring_index(TIMEDIFF('2008-06-22 19:05:27','2008-06-21 08:21:32'),':',-1),'秒') as sec
    ) a 其它的时、分、秒参照DAY自行修改