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
  • 相关阅读:
    WebService及WCF获取客户端IP,端口
    单链表创建,删除节点,获取元素(与线性表比较)
    c语言描述简单的线性表,获取元素,删除元素,
    解决wamp mysql数据库出现乱码的问题。
    c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)
    c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)
    css各兼容应该注意的问题
    C++需要注意的地方和小算法
    php最简单的文件处理。
    C++ 一目了然虚基类!
  • 原文地址:https://www.cnblogs.com/zerocc/p/2608755.html
Copyright © 2011-2022 走看看