简体   繁体   中英

SQL Server : function to display previous Friday's date if @date is not a Friday

I am a newbie to advanced SQL, I need to write a SVF in SQL Server to return previous Friday's date if the parameter date I entered is not a Friday.

For example, today is Wednesday, 7/1/2015, this function should return previous Friday 6/26/2015. Suppose today is Friday 7/3/2015, then the function will return 7/3/2015 (no change).

Ask for help if you can edit my following code:

CREATE FUNCTION fnDateCheck (@date datetime)
RETURNS @FridayDate date
AS
BEGIN 
    DECLARE @FridayDate

    if
        RETURN  

    else if 
        RETURN 

END
GO

I found this reference post, quite similar to what I am asking but it's not a function: Get last Friday's Date unless today is Friday using T-SQL

declare @date datetime;
set @date = '2012-08-10'

SELECT 
    CASE WHEN datepart(weekday, @date) > 5 
           THEN DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
         ELSE DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))  
    END

Thanks so much!!

CREATE FUNCTION fnDateCheck (@date datetime)
RETURNS datetime
AS
BEGIN 
   DECLARE @FridayDate DATETIME;

IF (DATEPART(WEEKDAY, @date ) <> 6)
   BEGIN
        SELECT @FridayDate = case when datepart(weekday, @date) >5 then
        DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
        else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end  
   END
ELSE 
   BEGIN
     SET @FridayDate = @date
    END

 RETURN @FridayDate;

END
GO

Seems something like this would help you might need to reformat and obviously this isn't a whole function, but the part that does the logic.

SELECT case 
    when datepart(dw,getdate()) != 6 then DATEADD(wk,DATEDIFF(wk,7,GETDATE()),4)
    else GETDATE()
end

The script you found works fine. You just need to write it into a function.

CREATE FUNCTION fnDateCheck
(
    @date datetime
)
RETURNS DATETIME
AS
    BEGIN 
        RETURN (SELECT CASE
            WHEN DATEPART(WEEKDAY, @date) > 5 THEN
                DATEADD(DAY, + 4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
            ELSE
                DATEADD(DAY, - 3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
        END)
    END
GO

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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