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.