5

当报告在星期一运行时,它需要将默认日期设置为星期五?还有 4 个其他条件查看要求。如何在 sql 语句中执行此操作是一个问题。

所以在伪代码中,

如果今天的日期是星期一,则使用完整日期格式将默认日期设置为星期五。

如果今天的日期是星期六,则使用完整日期格式将默认日期设置为星期五。

如果今天的日期是星期日,则使用完整日期格式将默认日期设置为星期五。

如果是其他日期,则将默认日期设置为前一个工作日。

所以可能需要一个 sql 语句和一个 case 语句。

现在我发现这些语句给出了星期几,所以现在需要做下一部分,这可能是一个案例陈述或一个函数?这是我需要帮助的部分。

select datename(dw,getdate()) --Monday
select datepart(dw,getdate()) -- 1
4

2 回答 2

7
SET DATEFIRST 1;

DECLARE @day DATE = SYSDATETIME();

SELECT @day = DATEADD
(
  DAY, 
  CASE 
    WHEN DATEPART(WEEKDAY, @day) IN (1,2) 
      THEN  -(DATEPART(WEEKDAY, @day)+1) 
    ELSE -1 
  END, 
  @day);

SELECT @day;
于 2013-02-13T22:38:18.377 回答
1

因此,如果 WEEKDAY(或 dw)值为 3-6(周二至周六),则减去一天。否则,星期天减去一天,星期一再减去两天。

幸运的是,星期日的值是 1,星期一的值是 2,所以你可以减去那些日子的值。

DECLARE @DefaultDate datetime
SET @DefaultDate = 
    CASE 
        WHEN DATEPART(WEEKDAY, GETDATE()) IN (1,2) -- OR (1,7) outside the U.S.
            THEN DATEADD(DAY, (-1 - DATEPART(WEEKDAY, GETDATE())), GETDATE())                       
        ELSE
            DATEADD(DAY, -1, GETDATE())
    END
于 2013-02-13T23:02:37.603 回答