我如何编写C#&x27的逻辑;SQL Server中的日期时间差?

我如何编写C#&x27的逻辑;SQL Server中的日期时间差?,c#,.net,sql-server,sql-server-2008,C#,.net,Sql Server,Sql Server 2008,我的C#代码中有这样的逻辑,它给了我两次之间的时差 示例输入为:“12:00 AM”-“11:15 AM”给出45分钟 DateTime startTime = Convert.ToDateTime(startTimeHH + ":" + startTimeMM + " " + startTimeAMPM); DateTime endTime = Convert.ToDateTime(endTimeHH + ":" + endTimeMM + " " + endTimeAMPM); DateTi

我的C#代码中有这样的逻辑,它给了我两次之间的时差

示例输入为:“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 server中引用了一些MSDN docs datetime函数,但找不到这些函数,它们可以为我提供从输入到
12:00 PM

但是现在我需要将这一部分转移到SQL server中。我该怎么写呢

示例输入为:'12:00 AM'-'11:15 AM'不会返回45它将返回75(它包含15作为25)

使用函数

也很方便

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
结果集 00:30:00.0000000
23:30:00.0000000
01:00:00.0000000
01:30:00.0000000


下面是一些返回“45”(分钟)的SQL


下面是一种获得.NET时间跨度的方法:

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

你好,谢拉克,我喜欢你的答案。然而,这是我的错误。请看我的编辑。它不会返回45,但会返回75。它假定15为25。它返回100而不是60。你能修改一下你的答案吗?好的,我自己想出来的。这一个工作得很好:选择CAST(左(CAST(@result as CHAR(8)),2)+'.+CAST(右(左(CAST(@result as CHAR(8)),5),2)作为CHAR(2))作为float)*100/60作为varchar(2))作为float)
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))