2016-06-07 29 views
0

我試圖完成這個函數,它會接受一個輸入日期並返回3個星期前的星期天的日期。 例如:如果我的輸入日期是2016年5月25日,那麼結果應該是5/1/2016 我把大部分功能放在一起,只是難以理解下一步該做什麼。在SQL Server中創建和執行函數

IF OBJECT_ID (N'dbo.ufnSundayThreeWeeksBack', N'FN') IS NOT NULL 
    DROP FUNCTION ufnSundayThreeWeeksBack; 
GO 
CREATE FUNCTION dbo.ufnSundayThreeWeeksBack(@SOMEDATE datetime) 
RETURNS date 
AS 

BEGIN 
    IF @SOMEDATE IS NULL 
     RETURN NULL; 
    DECLARE @result date; 
    SELECT @result = DATEADD(WEEK, -7, DATEADD(DAY, 1 - DATEPART(WEEKDAY, @SOMEDATE), @SOMEDATE)) 
    RETURN @result; 
END; 
GO 

回答

0

試試這個:

IF OBJECT_ID(N'dbo.ufnSundayThreeWeeksBack', N'FN') IS NOT NULL 
DROP FUNCTION ufnSundayThreeWeeksBack; 
GO 
CREATE FUNCTION dbo.ufnSundayThreeWeeksBack (@SOMEDATE DATETIME) 
RETURNS DATE 
AS 
    BEGIN 
    DECLARE @DateMinus3Weeks DATE = DATEADD(WEEK, -3, @SOMEDATE); 
    RETURN DATEADD(DAY, -(DATEPART(WEEKDAY, @DateMinus3Weeks)-1), @DateMinus3Weeks); 
    END; 
GO 

基本上減去3從給定日期星期,然後減去weekdaynumber才能到週日。

+0

謝謝你們倆明智的聖人 – Suehil2k