Sql server 计算SQL Server同一工作周之间的SLA

Sql server 计算SQL Server同一工作周之间的SLA,sql-server,Sql Server,我在数据库中有以下列。协议开始日期,实际开始日期。我需要应用以下逻辑:当AcualStartDate与AgreedStartDate在同一个工作周内时,它就在SLA的“内部”。如果不是这种情况,那么它就“在”SLA之外。如果两列中的任何一列为空,则它是“不完整的”。简单的CASE语句?您不需要使用变量,只需引用列名即可。我只是在一个完整的语句中使用了变量 DECLARE @agreedStartDate DATETIME DECLARE @actualStartDate DATETIME SE

我在数据库中有以下列。协议开始日期,实际开始日期。我需要应用以下逻辑:当AcualStartDate与AgreedStartDate在同一个工作周内时,它就在SLA的“内部”。如果不是这种情况,那么它就“在”SLA之外。如果两列中的任何一列为空,则它是“不完整的”。

简单的CASE语句?您不需要使用变量,只需引用列名即可。我只是在一个完整的语句中使用了变量

DECLARE @agreedStartDate DATETIME
DECLARE @actualStartDate DATETIME

SET @agreedStartDate = GETDATE()
SET @actualStartDate = GETDATE()

SELECT
    CASE
        WHEN
            @agreedStartDate IS NULL
            OR
            @actualStartDate IS NULL
        THEN
            'Incomplete'
        WHEN
            DATEPART(wk, @agreedStartDate) = DATEPART(wk, @actualStartDate)
            AND
            DATEPART(yyyy, @agreedStartDate) = DATEPART(yyyy, @actualStartDate)
        THEN
            'Inside'
        ELSE
            'Outside'
    END

在SQL Server中,可以使用如下CASE语句:

select case 
    when ActualStateDate is null or AgreedStartDate is null then 'Incomplete'
    when datepart(wk,ActualStateDate) = datepart(AgreedStartDate) then 'Inside'
    else 'Outside'
    end as ColumnName
from YourTable

根据您对《商业周刊》的理解,可能需要一些调整。否则,把它放在FROM子句的顶部,你就应该很好了。我没有DATEPART函数,这如何解决两个列都包含在同一个工作周(即星期一到星期五)中的情况呢。i、 e.如果约定的开始日期是今天11月30日,实际开始日期最迟必须是12月4日,才能在SLA范围内。关于“工作周”,您可以使用SET-DATEFIRST=1等,以便说明您一周的“开始日期”。但是,通常情况下,您应该尝试保持此设置对当前服务器默认值有效,而不是为单个查询设置它?我不知道如何使用这个…我认为DATEAL首先是那些设置“设置”的设置之一,而不是再次触摸。最好的方法是,无论连接到数据库的人是谁、在什么地方,它都是相同的。