我正在编写一些与日期相关的代码:
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。
代码,使用 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