我如何编写C#&x27的逻辑;SQL Server中的日期时间差?
我的C#代码中有这样的逻辑,它给了我两次之间的时差 示例输入为:“12:00 AM”-“11:15 AM”给出45分钟我如何编写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
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.000000023: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))