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