如附件,想统计某个人的时间总和。显示结果为 : 多少小时多少分钟
时间是非固定的,可能有很多,也可能只有两个 注意: 此数据是来自一个Excel文件的000068 汪婉宜 07:44 07:45 08:14
000069 刘洋 07:48 07:52 07:53
000070 廖碧香 09:38 09:39 09:42 09:44 09:51 09:52 10:26 10:27
000072 陈应娟 07:42 07:44 08:18
000074 杨伏 07:48
000075 何晨阳 07:42 07:44 08:19 10:42
000077 罗采治 00:31 00:32 00:34 04:43 04:57 07:25 07:58 08:01 08:06想要的结果是: 000068 汪婉宜 上班时间为:0时30分钟
000069 刘洋 上班时间为:0时5分钟
时间是非固定的,可能有很多,也可能只有两个 注意: 此数据是来自一个Excel文件的000068 汪婉宜 07:44 07:45 08:14
000069 刘洋 07:48 07:52 07:53
000070 廖碧香 09:38 09:39 09:42 09:44 09:51 09:52 10:26 10:27
000072 陈应娟 07:42 07:44 08:18
000074 杨伏 07:48
000075 何晨阳 07:42 07:44 08:19 10:42
000077 罗采治 00:31 00:32 00:34 04:43 04:57 07:25 07:58 08:01 08:06想要的结果是: 000068 汪婉宜 上班时间为:0时30分钟
000069 刘洋 上班时间为:0时5分钟
解决方案 »
- 多条件查询 sql的写法
- access 里的Update Member Set VIP=Not VIP在sql2000中应写作...
- 存储过程能创建,但执行显示列名无效的问题...
- 在sql中使用冲突标识的问题,知道的请进来,高分相送。在线等
- 【求助】删除连续重复数据(附带表结构和测试数据)
- 如何用脚本建立一个带密码的用户?非常急~~~~~~
- 几个获取时间的问题
- a DBA want to export the full database but the user still
- 怎样sum(field char)? (Sql7.0)
- 这个存储过程哪里出了问题?
- SQL 查询
- 急?在应使用条件的上下文(在 ';' 附近)中指定了非布尔类型的表达式。
0时30分钟=07:44 + 07:45 + 08:14 ????
这个“0时30分钟”结果你是咋来的呢?
-- 上班信息存放在一列的情况
create function dbo.f_gettime(@str varchar(1000))
returns nvarchar(1000)
as
begin
declare @str1 varchar(1000),@str2 varchar(1000),@time int,@re nvarchar(1000)
while charindex(' ',@str) > 0
begin
--select datediff(mi,'1900-01-01 00:31','1900-01-01 00:32')
select @str1 = substring(@str,1,charindex(' ',@str) - 1),
@str = stuff(@str,1,charindex(' ',@str),''),
@str2 = substring(@str,1,charindex(' ',@str+' ') - 1)
select @time = isnull(@time,0) + datediff(mi,'1900-01-01 '+@str1,'1900-01-01 '+@str2)
end
return isnull(case when @time > 60 then rtrim(@time / 60) + N' 时 ' + rtrim(@time % 60) + N' 分钟' else N'0 时 ' + rtrim(@time) + N' 分钟' end,N'0 时 0 分钟')
end
Go
create table tb(id varchar(1000), name nvarchar(1000),s varchar(1000))
Go
insert tb
select '000068',N'汪婉宜','07:44 07:45 08:14'
union select '000069',N'刘洋','07:48 07:52 07:53'
union select '000070',N'廖碧香','09:38 09:39 09:42 09:44 09:51 09:52 10:26 10:27'
union select '000072',N'陈应娟','07:42 07:44 08:18'
union select '000074',N'杨伏','07:48'
union select '000075',N'何晨阳','07:42 07:44 08:19 10:42'
union select '000077',N'罗采治','00:31 00:32 00:34 04:43 04:57 07:25 07:58 08:01 08:06'select id,name,dbo.f_gettime(s) from tb
drop table tbdrop function f_gettime/* 结果000068 汪婉宜 0 时 30 分钟
000069 刘洋 0 时 5 分钟
000070 廖碧香 0 时 49 分钟
000072 陈应娟 0 时 36 分钟
000074 杨伏 0 时 0 分钟
000075 何晨阳 3 时 0 分钟
000077 罗采治 7 时 35 分钟*/
我表里面已有很多数据了,
表里面的设计是这样的:编号 nvarchar(255),姓名nvarchar(255),时间1 varchar(255),时间2 varchar(255),时间3 varchar(255)~~~~~~~~~~时间40 nvarchar(255)
思路:求出最大时间-最小时间的 分钟 然后转换成 n小时m分钟最大时间 convert(datetime,left(string,5),120)
最小时间 convert(datetime,right(string,5),120)分钟差 datediff(minute,最小时间,最大时间)转换 n小时: 分钟差/60 m分钟:分钟差%60