zoukankan      html  css  js  c++  java
  • TSQL 常用星期设置

    --所在星期的第一天,计算给定日期所在星期的第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
  • 相关阅读:
    CS round--36
    Vijos 1002 过河 dp + 思维
    汇编模拟36选7
    1137
    E. Mike and Foam 容斥原理
    Even-odd Boxes hackerrank 分类讨论
    112. 作业之地理篇 最小费用最大流模板题
    1550: Simple String 最大流解法
    Sam's Numbers 矩阵快速幂优化dp
    java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
  • 原文地址:https://www.cnblogs.com/zerocc/p/2608755.html
Copyright © 2011-2022 走看看