SQL - 获取当前日期与一周开始和结束之间的所有日期
SQL - Get all dates between Current day and start and end of week
我正在尝试将开始日期设置为星期六
SET DATEFIRST 6 -- Sets start day to Saturday
然后获取一周开始到一周结束之间的所有GameDate。但它需要在当天完成。例如:如果今天是星期四而周末是星期五,我不想这样做:
DECLARE @StartWeek datetime Set @StartWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), -5))
DECLARE @EndWeek datetime Set @EndWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), 1))
因为这将显示接下来的 5 天。
如果 CurrentDay 是星期四,我不想显示接下来的 5 天。只是每周的 GameDates。
这是我目前得到的:
DECLARE @DateTable Table (DateofWeek Date) -- Creates table
DECLARE @DateToday Date SELECT DAY(GETDATE()) 'Current Day' -- Gets current date
DECLARE @StartWeek datetime Set @StartWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), -5)) --This is the part thats wrong
DECLARE @EndWeek datetime Set @EndWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), 1)) --This is the part thats wrong
SET DATEFIRST 6 -- Sets start day to Saturday
SELECT DATEDIFF ( DAY, @DateToday, @EndWeek) AS Diffrence_End
SELECT DATEDIFF ( DAY, @DateToday, @StartWeek) AS Diffrence_Start
FROM @DateTable
WHILE @DateToday >= @EndWeek AND @DateToday <= @StartWeek -- Shows all gameDates between StartWeek and Endweek
BEGIN
SELECT DATEDIFF ( DAY, @DateToday, @EndWeek)
Insert Into @DateTable
SELECT *
FROM @DateTable
END;
有些查询可能是错误的,尤其是最后一部分。
希望我说得足够清楚,如果有任何问题,请随时问我!
看看:
-- Sets start day to Saturday
SET DATEFIRST 6
-- Creates table
DECLARE @DateTable Table ([DateofWeek] date);
-- StartDate = DATEPART(DW, ... ) = 1
DECLARE @StartDate date;
SET @StartDate = DATEADD(day, (DATEPART(dw, GETDATE()) - 1) * -1, GETDATE());
-- EndDate = StartDate + 6 days
DECLARE @EndDate date;
SET @EndDate = DATEADD(day, 6, @StartDate);
-- Generates table values
DECLARE @CurrentDate date;
SET @CurrentDate = @StartDate;
WHILE @CurrentDate <= @EndDate
BEGIN
INSERT INTO @DateTable ([DateofWeek]) VALUES (@CurrentDate);
SET @CurrentDate = DATEADD(day, 1, @CurrentDate);
END
--Check it
SELECT *, DATENAME(dw, DateOfWeek) as Name FROM @DateTable;
GO
DateofWeek | Name
:------------------ | :--------
18/03/2017 00:00:00 | Saturday
19/03/2017 00:00:00 | Sunday
20/03/2017 00:00:00 | Monday
21/03/2017 00:00:00 | Tuesday
22/03/2017 00:00:00 | Wednesday
23/03/2017 00:00:00 | Thursday
24/03/2017 00:00:00 | Friday
dbfiddle here
我正在尝试将开始日期设置为星期六
SET DATEFIRST 6 -- Sets start day to Saturday
然后获取一周开始到一周结束之间的所有GameDate。但它需要在当天完成。例如:如果今天是星期四而周末是星期五,我不想这样做:
DECLARE @StartWeek datetime Set @StartWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), -5))
DECLARE @EndWeek datetime Set @EndWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), 1))
因为这将显示接下来的 5 天。 如果 CurrentDay 是星期四,我不想显示接下来的 5 天。只是每周的 GameDates。
这是我目前得到的:
DECLARE @DateTable Table (DateofWeek Date) -- Creates table
DECLARE @DateToday Date SELECT DAY(GETDATE()) 'Current Day' -- Gets current date
DECLARE @StartWeek datetime Set @StartWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), -5)) --This is the part thats wrong
DECLARE @EndWeek datetime Set @EndWeek = DATEADD(w, 0, DATEADD(w, DATEDIFF(w, 0,GETDATE()), 1)) --This is the part thats wrong
SET DATEFIRST 6 -- Sets start day to Saturday
SELECT DATEDIFF ( DAY, @DateToday, @EndWeek) AS Diffrence_End
SELECT DATEDIFF ( DAY, @DateToday, @StartWeek) AS Diffrence_Start
FROM @DateTable
WHILE @DateToday >= @EndWeek AND @DateToday <= @StartWeek -- Shows all gameDates between StartWeek and Endweek
BEGIN
SELECT DATEDIFF ( DAY, @DateToday, @EndWeek)
Insert Into @DateTable
SELECT *
FROM @DateTable
END;
有些查询可能是错误的,尤其是最后一部分。
希望我说得足够清楚,如果有任何问题,请随时问我!
看看:
-- Sets start day to Saturday SET DATEFIRST 6 -- Creates table DECLARE @DateTable Table ([DateofWeek] date); -- StartDate = DATEPART(DW, ... ) = 1 DECLARE @StartDate date; SET @StartDate = DATEADD(day, (DATEPART(dw, GETDATE()) - 1) * -1, GETDATE()); -- EndDate = StartDate + 6 days DECLARE @EndDate date; SET @EndDate = DATEADD(day, 6, @StartDate); -- Generates table values DECLARE @CurrentDate date; SET @CurrentDate = @StartDate; WHILE @CurrentDate <= @EndDate BEGIN INSERT INTO @DateTable ([DateofWeek]) VALUES (@CurrentDate); SET @CurrentDate = DATEADD(day, 1, @CurrentDate); END --Check it SELECT *, DATENAME(dw, DateOfWeek) as Name FROM @DateTable;
GO
DateofWeek | Name :------------------ | :-------- 18/03/2017 00:00:00 | Saturday 19/03/2017 00:00:00 | Sunday 20/03/2017 00:00:00 | Monday 21/03/2017 00:00:00 | Tuesday 22/03/2017 00:00:00 | Wednesday 23/03/2017 00:00:00 | Thursday 24/03/2017 00:00:00 | Friday
dbfiddle here