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
  • 相关阅读:
    Linux文件管理系统
    添加硬盘分区
    SWPFILE实现(增加swap空间)
    磁盘配额
    javascript插件uploadify简单实现文件上传
    Java继承--子类的实例化过程
    Java继承--子父类中的构造函数
    Java继承--覆盖
    设计模式——单例设计模式
    在vim中,使用可视化拷贝(剪切)粘贴文本
  • 原文地址:https://www.cnblogs.com/zerocc/p/2608755.html
Copyright © 2011-2022 走看看