1

C#コードにこのロジックがあり、2つの時間の時間差が得られます

入力例: '12:00 AM' - '11:15 AM' は 45 分を返します。

DateTime startTime = Convert.ToDateTime(startTimeHH + ":" + startTimeMM + " " + startTimeAMPM);
DateTime endTime = Convert.ToDateTime(endTimeHH + ":" + endTimeMM + " " + endTimeAMPM);
DateTime breakTime = Convert.ToDateTime(breakTimeHH + ":" + breakTimeMM);

TimeSpan hours = endTime.Subtract(startTime);
hours = hours.Subtract(breakTime.TimeOfDay);

SQLサーバーでいくつかのMSDNドキュメントの日時関数を参照しましたが、入力から時間を与えることができるこれらの関数を見つけることができませんでした12:00 PM

ただし、この部分を SQL サーバーに移動する必要があります。どうやって書くの?

入力例: '12:00 AM' - '11:15 AM'45返さず、75 を返します (15 が 25 として含まれています) 。

4

4 に答える 4

2

.NET TimeSpan のように見えるものを取得する 1 つの方法を次に示します。

declare @startTimeHH char(2) = '10',
        @startTimeMM char(2) = '30',
        @startTimeAMPM char(2) = 'AM',
        @endTimeHH char(2) = '12',
        @endTimeMM char(2) = '00',
        @endTimeAMPM char(2) = 'PM',
        @breakTimeHH char(2) = '01',
        @breakTimeMM char(2) = '15',
        @startTime DateTime, 
        @endTime DateTime, 
        @breakTime DateTime, 
        @result Time

set @startTime = cast ((@startTimeHH + ':' + @startTimeMM + ' ' + @startTimeAMPM) as Time);
set @endTime = cast ((@endTimeHH + ':' + @endTimeMM + ' ' + @endTimeAMPM) as Time);
set @breakTime = cast ((@breakTimeHH + ':' + @breakTimeMM) as Time);

set @result = @endTime - @startTime - @breakTime
select cast(@result as CHAR(8))

結果は00:15:00

于 2012-05-31T17:02:05.637 に答える
1
CREATE TABLE [dbo].#events (            
    [StartTime] time NULL,            
    [EndTime] time NULL )            

INSERT INTO #events            
VALUES            
('08:00', '08:30'),            
('08:30', '08:00'),            
('09:00', '10:00'),            
('15:00', '16:30')  

select  convert(time, dateadd(minute, datediff(minute, StartTime, EndTime), 0))  
From #events

drop table #events

ResultSet

00:30:00.0000000
23:30:00.0000000
01:00:00.0000000
01:30:00.0000000

于 2012-05-31T16:27:12.417 に答える
0

DateDiff関数を使用する

DatePartも便利です

于 2012-05-31T15:20:51.760 に答える
0

「45」(分)を返す SQL を次に示します。

DECLARE @Start DATETIME, @END DATETIME
SET @Start = '2009-05-02 10:00:50'
set @End = '2009-05-02 10:45:50'

    -- FYI
SELECT @start, @end

    -- returns 45
SELECT DateDiff(mi, @start, @end)
于 2012-05-31T16:31:50.960 に答える