我正在创建一个 ASP.NET 应用程序(C#),我快完成了,但是我有以下问题。
场景
在我的MSSQL表中,我有一个日期时间值,即2015-05-06 13:38:17.000我需要找出这是否超过6小时,但我需要考虑我们只在周一至周五的8:30-18:00工作。
我目前使用以下查询计算一个项目是否超过 4 小时(不考虑工作时间):
SELECT COUNT(*) FROM Table WHERE [DateSubmitted] < DATEADD(HOUR,-4,GETDATE())
我已经阅读了如何计算工作时间:计算两个日期之间的工作时间,但我不知道如何将它应用于我想做的事情。
任何帮助将不胜感激 - 谢谢。
只需在工作小时内获取最大日期,然后使用该参数进行查询
DECLARE @EndDate DATETIME, @StartBusinessDay DATETIME, @YesterdayEndBusinessDay DATETIME,@Interval DECIMAL(10,2)
SET @Interval=4*3600*-1
--set start period of business hour
--you can change hard coded date to variable one
SELECT @StartBusinessDay=CAST('2015-06-17 08:00:00' AS datetime),
@YesterdayEndBusinessDay =CAST('2015-06-16 17:00:00' AS datetime)
--get maximal date with basic calculation
SELECT @EndDate=DATEADD(ss,@Interval, GETDATE())
--if max date is not within business hour, do this
IF(@EndDate<@StartBusinessDay)
BEGIN
DECLARE @Difference DECIMAL(4,2)
--get the difference between result of basic calculation and start business hour
SELECT @Difference=DATEDIFF(ss, @EndDate, @StartBusinessDay)
--subtract it with initial interval
SET @Difference=@Interval-@Difference;
--get the new max date within business hour
SELECT @EndDate=DATEADD(ss,@Difference,@YesterdayEndBusinessDay)
SELECT @EndDate
END
--query with max date within business hour
SELECT COUNT(1) FROM Table
WHERE [DateSubmitted] < @EndDate