与日期相关的代码会生成语法错误

问题描述 投票:0回答:1

我正在编写一些与日期相关的代码:

DECLARE @StartDate AS date
DECLARE @EndDate AS date

CASE 
    WHEN DATEPART(dw,GETDATE()) = 2 THEN
        SET @StartDate = DATEADD(day,-7,GETDATE())
        SET @EndDate = DATEADD(day,-1,GETDATE())
    WHEN DATEPART(dw,GETDATE()) = 3 THEN
        SET @StartDate = DATEADD(day,-8,GETDATE())
        SET @EndDate = DATEADD(day,-2,GETDATE())
    WHEN DATEPART(dw,GETDATE()) = 4 THEN
        SET @StartDate = DATEADD(day,-9,GETDATE())
        SET @EndDate = DATEADD(day,-3,GETDATE())
    WHEN DATEPART(dw,GETDATE()) = 5 THEN
        SET @StartDate = DATEADD(day,-10,GETDATE())
        SET @EndDate = DATEADD(day,-4,GETDATE())
    WHEN DATEPART(dw,GETDATE()) = 6 THEN
        SET @StartDate = DATEADD(day,-11,GETDATE())
        SET @EndDate = DATEADD(day,-5,GETDATE())
    WHEN DATEPART(dw,GETDATE()) = 7 THEN
        SET @StartDate = DATEADD(day,-12,GETDATE())
        SET @EndDate = DATEADD(day,-6,GETDATE())
    WHEN DATEPART(dw,GETDATE()) = 1 THEN
        SET @StartDate = DATEADD(day,-13,GETDATE())
        SET @EndDate = DATEADD(day,-7,GETDATE())
END;  
PRINT @StartDate
PRINT @EndDate

但是,我收到以下错误消息:

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'CASE'.
Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'WHEN'.
Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'WHEN'.
Msg 156, Level 15, State 1, Line 13
Incorrect syntax near the keyword 'WHEN'.
Msg 156, Level 15, State 1, Line 16
Incorrect syntax near the keyword 'WHEN'.
Msg 156, Level 15, State 1, Line 19
Incorrect syntax near the keyword 'WHEN'.
Msg 156, Level 15, State 1, Line 22
Incorrect syntax near the keyword 'WHEN'.
Msg 137, Level 15, State 1, Line 24
Must declare the scalar variable "@EndDate".
Msg 137, Level 15, State 2, Line 27
Must declare the scalar variable "@EndDate".

有什么想法吗?

仅供参考,我使用的是 SQL Server 2012。

sql-server t-sql datepart
1个回答
0
投票

代码,使用 IF...ELSE:

DECLARE @StartDate AS date;
DECLARE @EndDate AS date;

IF DATEPART(dw,GETDATE()) = 2 
        SET @StartDate = DATEADD(day,-7,GETDATE())
ELSE IF DATEPART(dw,GETDATE()) = 3 
        SET @StartDate = DATEADD(day,-8,GETDATE())
ELSE IF DATEPART(dw,GETDATE()) = 4 
        SET @StartDate = DATEADD(day,-9,GETDATE())
ELSE IF DATEPART(dw,GETDATE()) = 5 
        SET @StartDate = DATEADD(day,-10,GETDATE())
ELSE IF DATEPART(dw,GETDATE()) = 6 
        SET @StartDate = DATEADD(day,-11,GETDATE())
ELSE IF DATEPART(dw,GETDATE()) = 7 
        SET @StartDate = DATEADD(day,-12,GETDATE())
ELSE IF DATEPART(dw,GETDATE()) = 1 
        SET @StartDate = DATEADD(day,-13,GETDATE());

SET @EndDate = DATEADD(day,+6,@StartDate);

PRINT @StartDate;
PRINT @EndDate;

参见:DBFIDDLE

© www.soinside.com 2019 - 2024. All rights reserved.