繁体   English   中英

如何根据当前日期以及该周的日期查找周数

[英]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 日......2021 年 1 月 3 日。

我预期的 output 列将是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM