獲取某一天所在周的開始日期和結束日期


指定一個日期,獲取其所屬周的開始日期和結束日期。以及前一周和后一周的開始日期和結束日期。

Insus.NET把這個功能寫成一個自定義函數Table-values Functions。

 

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:      Insus.NET
-- Create date: 2019-05-10
-- Update date: 2019-05-10
-- Description: 獲取指定日期相關周的數據
-- =============================================

CREATE FUNCTION [dbo].[tvf_WeekDatas]
(
    @SpecifiedDate DATETIME
)
RETURNS @dumpWeekTable TABLE
(
    [Week] NVARCHAR(MAX) NOT NULL,
    [First Date] DATETIME NULL,
    [Last Date] DATETIME NULL
)
AS
BEGIN    
    INSERT INTO @dumpWeekTable ([Week]) VALUES ('Previous Week'),('Current Week'),('Next Week')
    
    DECLARE @dd INT = DATEDIFF(dd, 0,@SpecifiedDate)
    DECLARE @WEEKDAY INT = DATEPART(WEEKDAY, @SpecifiedDate)

    DECLARE @FD INT = 1 - @WEEKDAY
    DECLARE @LD INT = 0 - @WEEKDAY

    DECLARE @FirstDate DATETIME = DATEADD(DAY, @FD, @dd)
    DECLARE @LastDate DATETIME = DATEADD(DAY, @LD, @dd)
    
    UPDATE @dumpWeekTable SET [First Date] = DATEADD(wk, -1,@FirstDate), [Last Date] = DATEADD(wk, 0,@LastDate) WHERE [Week] = 'Previous Week'
    UPDATE @dumpWeekTable SET [First Date] = DATEADD(wk, 0,@FirstDate), [Last Date] = DATEADD(wk, 1,@LastDate) WHERE [Week] = 'Current Week'
    UPDATE @dumpWeekTable SET [First Date] = DATEADD(wk, 1,@FirstDate), [Last Date] = DATEADD(wk, 2,@LastDate) WHERE [Week] = 'Next Week'

    RETURN
END
Source Code

 

如何使用上面這個函數,列舉例子說明:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM