现有表结构如下 
AlarmStartDateTime datetime 8 1
AlarmEndDateTime datetime 8 1想要查询出  所有记录的累计时间 (结果形式为 *年 *月* 日 *时 *分 *秒)我的思路是 先查询出 每一条记录的 时间差,然后这写差值总和就是 我要的结果但搞了半天也没搞定 请大家帮忙 !

解决方案 »

  1.   

    AlarmStartDateTime 和AlarmEndDateTime  这两个字段都是  datetime  型
      

  2.   

    这是我写的SQLSERVER 语句select sum ( FailureTime)from  
    (SELECT RTRIM(DATEDIFF(dd, 
          (CASE WHEN substring('AlarmStartDateTime', 11, 25) 
          > substring('AlarmEndDateTime', 11, 25) THEN dateadd(day, 1, AlarmStartDateTime) 
          ELSE AlarmStartDateTime END), AlarmEndDateTime)) 
          + ' ' + STUFF(STUFF(CONVERT(varchar, DATEADD(s, DATEDIFF(s, 
          AlarmStartDateTime, AlarmEndDateTime), 0), 108), 3, 1, ':'), 7, 1, '') 
          AS FailureTime
    FROM AnalogAlarm )  a这样结果不多,原因是 FailureTime 是varchar 数据类型 
    该如何搞呢? 把他变为别的可以计算的类型就可以了
      

  3.   

    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([alarmstartdatetime] datetime,[alarmenddatetime] datetime)
    insert [tb]
    select '2005-3-4 12:00:03','2006-5-7 11:10:20' union all
    select '2005-12-1 12:00:03','2007-9-9 11:10:20' union all
    select '2008-1-1 12:00:03','2008-6-6 11:10:20'select  rtrim(total/(365*24*3600))+'年'+rtrim(total/(30*24*3600)%12)+'月'+rtrim(total/(24*3600)%30)+'日'
    +rtrim(total/3600%24)+'时'+rtrim(total/60%60)+'分'+rtrim(total%60)+'秒'
    from
    (
    select total=sum(datediff(s,[alarmstartdatetime],[alarmenddatetime]))
    from tb
    ) t
    --测试结果:
    /*-------------------------
    3年5月2日21时30分51秒(1 行受影响)
    */
      

  4.   

    所有记录的累计时间 (结果形式为 *年 *月* 日 *时 *分 *秒)
    >> 如果这样有问题,不好弄 那结果直接以分的形式显示出来也可以
      

  5.   

    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([alarmstartdatetime] datetime,[alarmenddatetime] datetime)
    insert [tb]
    select '2005-3-4 12:00:03','2006-5-7 11:10:20' union all
    select '2005-12-1 12:00:03','2007-9-9 11:10:20' union all
    select '2008-1-1 12:00:03','2008-6-6 11:10:20'select 总分钟数=sum(datediff(mi,[alarmstartdatetime],[alarmenddatetime]))
    from tb--测试结果:
    /*
    总分钟数
    -----------
    1775370(1 行受影响)
    */
      

  6.   

    DECLARE @TB TABLE(AlarmStartDateTime  DATETIME, AlarmEndDateTime  DATETIME)
    INSERT @TB
    SELECT '2008-11-29 10:00:18', '2008-11-29 10:01:43' UNION ALL
    SELECT '2008-11-29 10:02:47', '2008-11-30 10:02:32'SELECT SUM(S/60) AS Minutes
    FROM (
    SELECT DATEDIFF(SS,AlarmStartDateTime,AlarmEndDateTime) AS S FROM @TB
    ) T
    /*
    Minutes     
    ----------- 
    1440
    */
      

  7.   

    --例如
    declare @s as int
    set @s = 1000000 --秒select @s / (24 * 60 * 60) 天,
           (@s % (24 * 60 * 60)) / (60 * 60) 小时,
           (@s % (24 * 60 * 60)) % (60 * 60) / (60 ) 分钟,
           (@s % (24 * 60 * 60)) % (60 * 60) % (60 ) 秒/*
    天           小时          分钟          秒           
    ----------- ----------- ----------- ----------- 
    11          13          34          40(所影响的行数为 1 行)
    */