计算日期时间值的年龄时会考虑工作时间



我正在创建一个 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

相关内容

  • 没有找到相关文章

最新更新