--需求:关于日期的一些有意思的脚本 --脚本: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;