关于日期的一些有意思的脚本

--需求:关于日期的一些有意思的脚本
--脚本:t-sql for sql server 2012
--日期:20181101 9:52
--作者:leegq
SELECT  DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) AS 本年第一天 ,
        DATEADD(DAY, -1, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) AS 本年最后一天 ,
        DATEDIFF(DAY, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0),
                 DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) AS 本年有多少天 ,
        DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0) AS 本季度第一天 ,
        DATEADD(DAY, -1,
                DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()) + 1, 0)) AS 本季度最后一天 ,
        DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS 本月第一天 ,
        DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)) AS 本月最后一天 ,
        DATEADD(DAY, -1, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) + 1, 0)) AS 本季度最后一天 ,
        DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0) AS 本周第一天 ,
        DATEADD(DAY, -1, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) + 1, 0)) AS 本周最后一天;   
--需求:计算某一年度的日历
DECLARE @s_day AS NVARCHAR(4);
SET @s_day = '2019'--输入年度
SET @s_day=@s_day+'-1-1';
WITH    x1 ( number )
          AS ( SELECT   number
               FROM     master..spt_values
               WHERE    type = 'P'
                        AND number BETWEEN 1
                                   AND     DATEDIFF(DAY,
                                                    DATEADD(YEAR,
                                                            DATEDIFF(YEAR, 0,
                                                              @s_day), 0),
                                                    DATEADD(YEAR,
                                                            DATEDIFF(YEAR, 0,
                                                              @s_day) + 1, 0))
             )
    SELECT  month_name AS 月份 ,
            ISNULL(星期日, '') AS 星期日 ,
            ISNULL(星期一, '') AS 星期一 ,
            ISNULL(星期二, '') AS 星期二 ,
            ISNULL(星期三, '') AS 星期三 ,
            ISNULL(星期四, '') AS 星期四 ,
            ISNULL(星期五, '') AS 星期五 ,
            ISNULL(星期六, '') AS 星期六
    FROM    ( SELECT    month_name ,
                        week ,
                        week_name ,
                        date_name
              FROM      ( SELECT    MONTH(DATEADD(DAY, number - 1, @s_day)) AS month_name ,
                                    DATENAME(DAY,
                                             DATEADD(DAY, number - 1, @s_day)) AS date_name ,
                                    DATENAME(WEEKDAY,
                                             DATEADD(DAY, number - 1, @s_day)) AS week_name ,
                                    DATEPART(WEEK,
                                             DATEADD(DAY, number - 1, @s_day)) AS week
                          FROM      x1
                        ) AS ad
            ) AS a PIVOT ( MAX(date_name) FOR week_name IN ( [星期日], [星期一],
                                                             [星期二], [星期三],
                                                             [星期四], [星期五],
                                                             [星期六] ) ) AS pt
    ORDER BY week;

  

原文地址:https://www.cnblogs.com/bgbird/p/9887632.html