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
  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/zerocc/p/2608755.html
Copyright © 2011-2022 走看看