--所在星期的第一天,计算给定日期所在星期的第1天(星期日为第一天) DECLARE @Date DATETIME SET @Date= GETDATE() --与SQL Server语言版本相关的算法 --思路:当前日期+星期日(每周的第1天)与当前日期的差的天数 --DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关 SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天) SELECT DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS 所在星期的第一天 --星期日,与SQL Server语言版本或@@DATEFIRST无关 --1899-12-31 是星期日,1899-12-31 再加上(当前日期与 1899-12-31差的星期数)个星期 SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),-1) AS 所在星期的星期日 --或者 SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),6) AS 所在星期的星期日 GO --所在星期的第二天,计算给定日期所在星期的第2天(星期日为第一天) DECLARE @Date DATETIME SET @Date= GETDATE() --DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关 SET DATEFIRST 7 -- SELECT DATEADD(DAY,2-DATEPART(WEEKDAY,@Date),@Date) AS 所在星期的第二天 --'1900-01-01' 是星期一,'1900-01-01' 再加上(当前日期与'1900-01-01'差的星期数)个星期 SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,@Date),0) AS 所在星期的星期一 GO --上个星期第一天,计算给定日期所在星期的上一个星期日(星期日为第一天) DECLARE @Date DATETIME SET @Date= GETDATE() --思路:当前日志所在星期的星期日再减1周 --DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关 --SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天) SELECT DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 上个星期第一天 --一周等于7天 SELECT DATEADD(DAY,-7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 上个星期第一天 --简化 SELECT DATEADD(DAY,-6-DATEPART(WEEKDAY,@Date),@Date) AS 上个星期第一天 --上个星期日,与SQL Server语言版本或@@DATEFIRST无关 SELECT DATEADD(WEEK,-1+DATEDIFF(WEEK,-1,@Date),-1) AS 上个星期日 --或者 SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),-1) AS 上个星期日 GO --下个星期第一天,计算给定日期所在星期的下一个星期日(星期日为第一天) DECLARE @Date DATETIME SET @Date= GETDATE() SET DATEFIRST 7 SELECT DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 下个星期第一天 --一周等于7天 SELECT DATEADD(DAY,7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 下个星期第一天 --简化 SELECT DATEADD(DAY,8-DATEPART(WEEKDAY,@Date),@Date) AS 下个星期第一天 --下个星期日,与SQL Server语言版本或@@DATEFIRST无关 SELECT DATEADD(WEEK,1+DATEDIFF(WEEK,-1,@Date),-1) AS 下个星期日 --或者 SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),6) AS 下个星期日 GO --判断给定日期是星期几 DECLARE @Date DATETIME SET @Date= GETDATE() --DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关 SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天) SELECT DATEPART(WEEKDAY,@Date) --返回值 1-星期日,2-星期一,3-星期二......7-星期六 --上面算法与SQL 语言版本或 @@DATEFIRST 相关 --下面算法与SQL Server语言版本或@@DATEFIRST无关 SELECT DATENAME(WEEKDAY,@Date) 星期 GO
T-SQL 常用星期设置
最新推荐文章于 2021-09-13 16:42:34 发布