获取某一年的母亲节或父亲节日期

栏目: 数据库 · 发布时间: 6年前

内容简介:今天是母亲节,它是在每一年的五月份的第二个星期天,而父亲节,是在每一个的六月份的第三个星期天。把星期天设置为每周的开始,《

今天是母亲节,它是在每一年的五月份的第二个星期天,而父亲节,是在每一个的六月份的第三个星期天。

把星期天设置为每周的开始, 将一周的第一天设置为从 1 到 7 的一个数字。

SET DATEFIRST 7;  
参考MSDN:

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/set-datefirst-transact-sql?view=sql-server-2017

然后,我们需要写一个自定义函,获取一年之中所有周别数据:

Week Functionhttps://www.cnblogs.com/insus/archive/2009/12/13/1622988.html

或者拷贝下面代码即可(稍有修改):


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[svf_Week]
(
    @StartYear INT,
    @EndYear INT
)
RETURNS @Week TABLE([ID] INT IDENTITY(1,1) PRIMARY KEY,[Year] [INT] NULL,[Week] [INT] NULL,[StartDate] [DATETIME] NULL,[EndDate] [DATETIME] NULL)
AS
BEGIN
    DECLARE @StartDateOfYear DATETIME 
    DECLARE @LastDateOfYear DATETIME 
    DECLARE @WeekStartDate DATETIME 
    DECLARE @WeekEndDate DATETIME 
    DECLARE @Weeks INT 

    WHILE @StartYear <= @EndYear
    BEGIN
        SET @StartDateOfYear = CAST((CAST(@StartYear AS VARCHAR(4)) + '-01-01') AS DATETIME)
        SET @LastDateOfYear= CAST((CAST(@StartYear AS VARCHAR(4))+ '-12-31') AS DATETIME)
        SET @Weeks = 1         
        
        DECLARE @WeekStartDateOfYear DATETIME
        IF DATEPART(DW,@StartDateOfYear) > 4
            SET @WeekStartDateOfYear = DATEADD(DAY,(8 - DATEPART(DW,@StartDateOfYear)) ,@StartDateOfYear)
        ELSE 
            SET @WeekStartDateOfYear = DATEADD(DAY,(-(DATEPART(DW,@StartDateOfYear)-1)),@StartDateOfYear)

        SET @WeekStartDate = @WeekStartDateOfYear
        SET @WeekEndDate = DATEADD(DAY,6,@WeekStartDate)
        WHILE DATEDIFF(DAY,@WeekStartDate,@LastDateOfYear) >= 4
        BEGIN
            INSERT INTO @Week([Year],[Week],[StartDate],[EndDate]) VALUES (@StartYear,@Weeks,@WeekStartDate,@WeekEndDate)
            SET @Weeks = @Weeks + 1
            SET @WeekStartDate = @WeekStartDate + 7
            SET @WeekEndDate = @WeekEndDate + 7
        END
        SET @StartYear = @StartYear + 1
    END  
        RETURN
END
GO

Source Code

把这个要求,写成一个自定义函数,方便用在程序应用即可。

获取某一年的母亲节或父亲节日期


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_Parents_Festival]
(
    @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)
AS
BEGIN       
    DECLARE @Weeks AS TABLE([Year] INT,[StartDateOfWeek] DATETIME)
    INSERT INTO @Weeks ([Year],[StartDateOfWeek]) SELECT [Year],[StartDate] FROM [dbo].[svf_Week] (@StartYear,@EndYear)
    
    WHILE @StartYear <= @EndYear
    BEGIN
        INSERT INTO @tempTable ([Year]) VALUES(@StartYear)      

        UPDATE @tempTable SET [Mother's Day] = (
            SELECT [StartDateOfWeek] FROM (
                SELECT ROW_NUMBER() OVER (ORDER BY [StartDateOfWeek] ASC) AS [RowNumber], [StartDateOfWeek] FROM @Weeks 
                WHERE [Year] = @StartYear AND MONTH([StartDateOfWeek]) = 5) AS m 
            WHERE [RowNumber] = 2)
        WHERE [Year] = @StartYear

        UPDATE @tempTable SET [Father's Day] = (
            SELECT [StartDateOfWeek] FROM (
                SELECT ROW_NUMBER() OVER (ORDER BY [StartDateOfWeek] ASC) AS [RowNumber], [StartDateOfWeek] FROM @Weeks 
                WHERE [Year] = @StartYear AND MONTH([StartDateOfWeek]) = 6) AS f 
            WHERE [RowNumber] = 3)
        WHERE [Year] = @StartYear

        SET @StartYear = @StartYear + 1
    END  

    RETURN
END

Source Code

下面代码年份,看看得到的日期是否正确:

获取某一年的母亲节或父亲节日期


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

REST实战

REST实战

Jim Webber、Savas Parastatidis、Ian Robinson / 李锟、俞黎敏、马钧、崔毅 / 东南大学出版社 / 2011-10 / 78.00元

为何典型的企业项目无法像你为web所开发的项目那样运行得如此平滑?对于建造分布式和企业级的应用来说,rest架构风格真的提供了一个可行的替代选择吗? 在这本富有洞察力的书中,三位soa专家对于rest进行了讲求实际的解释,并且通过将web的指导原理应用到普通的企业计算问题中,向你展示了如何开发简单的、优雅的分布式超媒体系统。你将会学习到很多技术,并且随着一家典型的公司从最初的小企业逐渐成长为......一起来看看 《REST实战》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具