如何根据当前日期查找周数以及该周的日期
How to find week Number based on current date and what are the dates in that week
我需要根据当前日期找出周数以及该周的日期。
举个例子,当前日期是 2020 年 12 月 27 日,那么我需要找出周号,即 53 以及日期是什么,即 2020 年 12 月 28 日、2020 年 12 月 29 日....03- 2021 年 1 月。
我预期的输出列是:
WeekNo Date Day
declare @date date = '30-Dec-2020'; --'20210101'
select @date as _date,
datepart(iso_week, @date) as isoweek,
--iso week starts on previous monday. weekday of monday is always 2 when accounting for @@datefirst
dateadd(day, -(7-2+datepart(weekday, dateadd(day, @@datefirst, @date)))%7, @date) as isoweekstartdate,
--isoweekenddate(inclusive) = add 6 days to isoweekstartdate
dateadd(day, 6, dateadd(day, -(7-2+datepart(weekday, dateadd(day, @@datefirst, @date)))%7, @date)) as isoweekenddate;
select
datepart(iso_week, @date) as isoweek,
dateadd(day, n.num, dateadd(day, -(7-2+datepart(weekday, dateadd(day, @@datefirst, @date)))%7, @date)) as isoweekdate
from
(
values (0),(1),(2),(3),(4),(5),(6)
) as n(num);
使用简单的循环
DECLARE @date DATE, @WeekNo TINYINT, @Start TINYINT,@End TINYINT, @StartDate DATE,@EndDate DATE, @Cdate DATE
SET @date='27-DEC-2020'
SET @StartDate = DATEADD(DAY,-7,@date)
set @EndDate = DATEADD(DAY,7,@date)
SET @WeekNo = DATEPART(WEEK,@date)
SET @Start = 1
SET @End = DATEDIFF(DAY,@StartDate,@EndDate)
DECLARE @dates TABLE(WeekNo TINYINT, [Date] DATE, [Day] VARCHAR(20))
WHILE(@Start <=@End)
BEGIN
SET @Cdate = DATEADD(DAY,@Start,@StartDate)
IF DATEPART(WEEK,@Cdate)=@WeekNo
INSERT @dates VALUES(@WeekNo, @Cdate, DATENAME(WEEKDAY , @Cdate))
SET @Start = @Start + 1
END
SELECT * FROM @dates
我需要根据当前日期找出周数以及该周的日期。
举个例子,当前日期是 2020 年 12 月 27 日,那么我需要找出周号,即 53 以及日期是什么,即 2020 年 12 月 28 日、2020 年 12 月 29 日....03- 2021 年 1 月。
我预期的输出列是:
WeekNo Date Day
declare @date date = '30-Dec-2020'; --'20210101'
select @date as _date,
datepart(iso_week, @date) as isoweek,
--iso week starts on previous monday. weekday of monday is always 2 when accounting for @@datefirst
dateadd(day, -(7-2+datepart(weekday, dateadd(day, @@datefirst, @date)))%7, @date) as isoweekstartdate,
--isoweekenddate(inclusive) = add 6 days to isoweekstartdate
dateadd(day, 6, dateadd(day, -(7-2+datepart(weekday, dateadd(day, @@datefirst, @date)))%7, @date)) as isoweekenddate;
select
datepart(iso_week, @date) as isoweek,
dateadd(day, n.num, dateadd(day, -(7-2+datepart(weekday, dateadd(day, @@datefirst, @date)))%7, @date)) as isoweekdate
from
(
values (0),(1),(2),(3),(4),(5),(6)
) as n(num);
使用简单的循环
DECLARE @date DATE, @WeekNo TINYINT, @Start TINYINT,@End TINYINT, @StartDate DATE,@EndDate DATE, @Cdate DATE
SET @date='27-DEC-2020'
SET @StartDate = DATEADD(DAY,-7,@date)
set @EndDate = DATEADD(DAY,7,@date)
SET @WeekNo = DATEPART(WEEK,@date)
SET @Start = 1
SET @End = DATEDIFF(DAY,@StartDate,@EndDate)
DECLARE @dates TABLE(WeekNo TINYINT, [Date] DATE, [Day] VARCHAR(20))
WHILE(@Start <=@End)
BEGIN
SET @Cdate = DATEADD(DAY,@Start,@StartDate)
IF DATEPART(WEEK,@Cdate)=@WeekNo
INSERT @dates VALUES(@WeekNo, @Cdate, DATENAME(WEEKDAY , @Cdate))
SET @Start = @Start + 1
END
SELECT * FROM @dates