如附件,想统计某个人的时间总和。显示结果为 : 多少小时多少分钟
 
时间是非固定的,可能有很多,也可能只有两个     注意: 此数据是来自一个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分钟

解决方案 »

  1.   

    用excel统计?
    0时30分钟=07:44 + 07:45 + 08:14 ????
    这个“0时30分钟”结果你是咋来的呢?
      

  2.   


    --  上班信息存放在一列的情况
    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 分钟*/
      

  3.   

    另外,我表里面的设计是这样的:编号 nvarchar(255),姓名nvarchar(255),时间1 varchar(255),时间2 varchar(255),时间3 varchar(255)~~~~~~~~~~时间40 nvarchar(255)
      

  4.   


    我表里面已有很多数据了,
    表里面的设计是这样的:编号 nvarchar(255),姓名nvarchar(255),时间1 varchar(255),时间2 varchar(255),时间3 varchar(255)~~~~~~~~~~时间40 nvarchar(255)
      

  5.   


    思路:求出最大时间-最小时间的 分钟 然后转换成 n小时m分钟最大时间 convert(datetime,left(string,5),120)
    最小时间 convert(datetime,right(string,5),120)分钟差  datediff(minute,最小时间,最大时间)转换 n小时: 分钟差/60  m分钟:分钟差%60