SQL Server:如果@date不是星期五,则显示上周五的日期

时间:2015-07-01 23:27:18

标签: sql sql-server function tsql

我是高级SQL的新手,如果我输入的参数日期不是星期五,我需要在SQL Server中编写一个SVF来返回上周五的日期。

例如,今天是2015年7月1日星期三,此功能应在2015年6月26日星期五之前返回。假设今天是2015年7月3日星期五,那么该函数将返回2015年7月3日(无变化)。

如果您可以编辑以下代码,请求帮助:

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

    if
        RETURN  

    else if 
        RETURN 

END
GO

我找到了这篇参考文章,与我的要求非常相似,但它不是一个功能: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

非常感谢!!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

似乎这样的事情可能会帮助你重新格式化,显然这不是一个完整的功能,而是完成逻辑的部分。

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

答案 2 :(得分:0)

您找到的脚本运行正常。你只需要把它写成一个函数。

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