Find Mondays between 2 dates

后端 未结 4 1661
梦如初夏
梦如初夏 2020-12-18 11:45

I need to display dates of all Mondays in the given date range.

For example, if my start date is 01/05/2015 and end date is 31/05/2015, I

4条回答
  •  独厮守ぢ
    2020-12-18 12:41

    Refer: Select dates of a day between two dates.

    SELECT [Day],[Dt] FROM dbo.fnGetDatesforAday('7/1/2008','8/31/2008','Sunday')
    
    
    CREATE FUNCTION fnGetDatesforAday
    (
          -- Add the parameters for the function here
          @DtFrom DATETIME,
          @DtTo DATETIME,
          @DayName VARCHAR(12)
    )
    
    RETURNS @DateList TABLE ([Day] varchar(20),Dt datetime)
    
    AS
    BEGIN
          IF NOT (@DayName = 'Monday' OR @DayName = 'Sunday' OR @DayName = 'Tuesday' OR @DayName = 'Wednesday' OR @DayName = 'Thursday' OR @DayName = 'Friday' OR @DayName = 'Saturday')
          BEGIN
                --Error Insert the error message and return
    
                INSERT INTO @DateList
                SELECT 'Invalid Day',NULL AS DAT
                RETURN
          END 
    
          DECLARE @TotDays INT
          DECLARE @CNT INT
    
          SET @TotDays =  DATEDIFF(DD,@DTFROM,@DTTO)-- [NO OF DAYS between two dates]
    
          SET @CNT = 0
          WHILE @TotDays >= @CNT        -- repeat for all days 
          BEGIN
            -- Pick each single day and check for the day needed
                IF DATENAME(DW, (@DTTO - @CNT)) = @DAYNAME
                BEGIN
                      INSERT INTO @DateList
                     SELECT @DAYNAME,(@DTTO - @CNT) AS DAT
                END
                SET @CNT = @CNT + 1
          END
          RETURN
    END
    

提交回复
热议问题