- SET ANSI_NULLS ON
- GO
-
- SET QUOTED_IDENTIFIER ON
- GO
-
- -- =============================================
- -- Author: Insus.NET
- -- Create date: 2019-05-12
- -- Update date: 2019-05-12
- -- Description: 获取节日日期
- -- =============================================
- CREATE FUNCTION [dbo].[svf_Festivals]
- (
- @StartYear INT,
- @EndYear INT
- )
- RETURNS @tempTable TABLE([ID] INT IDENTITY(1,1) PRIMARY KEY,[Year] [INT] NOT NULL,[Mother's Day] [DATETIME] NULL,[Father's Day] [DATETIME] NULL,[Thanksgiving Day] DATETIME)
- AS
- BEGIN
- WHILE @StartYear <= @EndYear
- BEGIN
- INSERT INTO @tempTable ([Year]) VALUES(@StartYear)
- UPDATE @tempTable SET [Mother's Day] = (
- SELECT [Date] FROM (
- SELECT ROW_NUMBER() OVER (ORDER BY [Date] ASC) AS [RowNumber], [Date] FROM [dbo].[tvf_DaysOfMonth](CAST(@StartYear AS NVARCHAR(4)) + '-05-01')
- WHERE DATENAME(dw,[Date]) = 'Sunday') AS md
- WHERE [RowNumber] = 2)
- WHERE [Year] = @StartYear
-
- UPDATE @tempTable SET [Father's Day] = (
- SELECT [Date] FROM (
- SELECT ROW_NUMBER() OVER (ORDER BY [Date] ASC) AS [RowNumber], [Date] FROM [dbo].[tvf_DaysOfMonth](CAST(@StartYear AS NVARCHAR(4)) + '-06-01')
- WHERE DATENAME(dw,[Date]) = 'Sunday') AS fd
- WHERE [RowNumber] = 3)
- WHERE [Year] = @StartYear
-
- UPDATE @tempTable SET [Thanksgiving Day] = (
- SELECT [Date] FROM (
- SELECT ROW_NUMBER() OVER (ORDER BY [Date] ASC) AS [RowNumber], [Date] FROM [dbo].[tvf_DaysOfMonth](CAST(@StartYear AS NVARCHAR(4)) + '-11-01')
- WHERE DATENAME(dw,[Date]) = 'Thursday') AS td
- WHERE [RowNumber] = 4)
- WHERE [Year] = @StartYear
-
- SET @StartYear = @StartYear + 1
- END
-
- RETURN
- END
- GO