现有表结构如下
AlarmStartDateTime datetime 8 1
AlarmEndDateTime datetime 8 1想要查询出 所有记录的累计时间 (结果形式为 *年 *月* 日 *时 *分 *秒)我的思路是 先查询出 每一条记录的 时间差,然后这写差值总和就是 我要的结果但搞了半天也没搞定 请大家帮忙 !
AlarmStartDateTime datetime 8 1
AlarmEndDateTime datetime 8 1想要查询出 所有记录的累计时间 (结果形式为 *年 *月* 日 *时 *分 *秒)我的思路是 先查询出 每一条记录的 时间差,然后这写差值总和就是 我要的结果但搞了半天也没搞定 请大家帮忙 !
解决方案 »
- 一个仅十万条数据的sqlserver数据库备份文件大小多大100M!这合理吗
- 求教
- GROUP BY 字句如何简单SELECT 其他非聚合函数字段?
- asp 中的 string 功能,在mssql 中是什么?
- 在SQL2000中,数据导入导出怎样才能实现,导入的数据ID自动增长?
- 我要向数据库里存一篇2.5万中文字的文章,我应该选择什么字段类型?
- 两数据库的同步问题?
- Query Analyzer怎么刪不了多筆記錄﹖
- 请问这个语句在ASP中能取得记录集吗set rec=objCnn.Execute(strsql)
- 高难度SQL问题,挑战SQL高手!!(300分重谢)[3]
- 讨论:软件推销的动力、阻力和逻辑过程
- SQL Server 与此同时ODBC 为什么总是连不上,跪求????
(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 数据类型
该如何搞呢? 把他变为别的可以计算的类型就可以了
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 行受影响)
*/
>> 如果这样有问题,不好弄 那结果直接以分的形式显示出来也可以
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 行受影响)
*/
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
*/
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 行)
*/