0
CREATE procedure St_Proc_GetUserReportforCurrentDayTask                        
@userID int                        
as                        
    Begin                        
        set NoCount on;                        
        DECLARE @TODAY DATE                          
        SET @TODAY = CONVERT(VARCHAR(10), GETDATE(), 111)                        
        select  CONVERT(VARCHAR,production.CalendarDate,101) + RIGHT (CONVERT(VARCHAR,production.CalendarDate , 100 ) ,7) as Date,                         
        RegionAndProjectInfo.RegionProjectName as Region ,                        
        County.CountyName as County,                        
        WorkType.WorkTypeName as WorkType,                        
        Task.TaskName as Task,            
        Production.VolumeProcessed as 'Volumes Processed',                        
        Production.TimeSpent as 'Duration'                        
        from Production                         
        inner join RegionAndProjectInfo                        
        on                        
        RegionAndProjectInfo.RegionProjectID=Production.RegionProjectID                        
        inner join County                        
        on                         
        County.CountyID=Production.CountyID                        
        inner join WorkType                        
        on                        
        WorkType.WorkTypeID=Production.WorkTypeID                        
        inner join Task                        
        on                        
        Task.TaskID=Production.TaskID                        
        where Production.UserID=@userID and CalendarDate >= @TODAY                        
    End 

上記のストアドプロシージャから、データセットに入力しています。その後、このデータセットをグリッドビューにバインドしています。データセットでは、列の期間にHH:MM形式のデータが含まれています(例-01:00、12:45、02:59など)。HH:MM形式の期間の合計をから取得する方法はありますか?データセット自体。期間の合計を取得するためにデータベースから再度クエリを実行したくありません。

4

1 に答える 1

1

少なくともSQL-Server2008を使用している場合は、Timeデータ型を使用して.NETを表す必要がありますTimeSpan

varchar-columnで機能させるには Linq-To-DataSet、たとえば次のように使用します。

var timeSpans = dataSet.Tables[0].AsEnumerable()
    .Select(r => new {
        DurHour   = r.Field<String>("Duration").Split(':')[0],
        DurMinute = r.Field<String>("Duration").Split(':')[1]
    })
    .Select(x => new TimeSpan(int.Parse(x.DurHour), int.Parse(x.DurMinute), 0));

Console.WriteLine("Total time in minutes: {0}", timeSpans.Sum(ts=>ts.TotalMinutes));

ただし、これは回避策にすぎません。実際には、varchar列にタイムスパンを格納することは避け、varcharはテキストにのみ使用して他には何も使用しないでください。

DateTimeSQL-Server 2005(または他のデータベース管理システム)では、開始用と終了用の2つの列を使用することもできますDateTime

于 2012-07-18T14:27:24.610 に答える