【问题标题】:On Monday pull data from Friday to Sunday, on other weekdays from prior day only周一从周五到周日提取数据,其他工作日仅从前一天提取数据
【发布时间】:2016-03-17 13:14:58
【问题描述】:

我有这个查询,它目前正在从前一个工作日关闭的 SQL Server 数据库中提取所有事件。它非常简洁,因为它使用模来独立于 @@DATEFIRST 本地设置。但是,我需要对其进行修改,以便在星期一它让我在星期五和星期日之间关闭所有事件。

当前代码:

SELECT 
    inc.Incident_Id, inc.Close_Time
FROM 
    inc
WHERE 
    CONVERT (CHAR(10), inc.Close_Time, 126) = CONVERT (CHAR(10), (DATEADD(DAY, CASE (DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7 
                        WHEN 1 THEN -2 
                        WHEN 2 THEN -3 
                        ELSE -1 
                        END, DATEDIFF(DAY, 0, GETDATE()))),126)

我尝试在第一次 CONVERT 之前使用另一个 CASE DATEPART(WEEKDAY, GETDATE()),但它没有成功,因为它看起来 >= 和

总结起来应该是这样的:

  • 周一 - 周五和周日之间关闭事件
  • 其他工作日 - 前一天关闭的事件

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    试试这个:

    DECLARE @from date = 
        DATEADD(day, 
          CASE datediff(d, 0, getdate()) %7
               WHEN 0 THEN -3
               WHEN 6 THEN -2
               ELSE -1
          END, getdate())
    
    SELECT inc.Incident_Id, inc.Close_Time
    FROM inc  
    WHERE 
      inc.Close_Time >= @from
      AND inc.Close_Time < @to
    

    周一和周日将在周五及之后返回

    周二至周六将返回前一天。

    【讨论】:

    • 抱歉,我的请求输入有误。周日应提供周五和周六。此外,您的代码还为我提供了周二和周五之间的先前和当前事件。我只需要周二到周五的前一天。 ">=" 适用于周末和周一。
    • 谢谢,这很好,但是否可以调整周五、周六、周日使用 ">=" 而其他日子只使用 "=" 的代码?
    • 代码再次调整,注意你的代码会导致全表扫描,这会比你的代码更快,因为它是sargable
    猜你喜欢
    • 2019-06-26
    • 2017-09-16
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多