zoukankan      html  css  js  c++  java
  • sqlserver日期推算

    --************
    --在两个日期范围里所跨越那几周返回如:1,2表是第一周和第二周,
    declare @aa table (date datetime,weekdays int )   
    declare @i int    
    set @i=datediff(day,@bdate,@edate)    
    while(@i>=0)    
    begin    
    insert @aa    
    values (dateadd(day,@i,@bdate),datepart(week,dateadd(day,@i,@bdate)))    
    set @i=@i-1    
    end  
    select weekdays   
    into #week  
    from @AA group by weekdays 
    --************
    --在日期范围里减去周六、周日的天数
    create function a (@Sdate datetime ,@Edate datetime)  
    returns   int  
    as  
    begin  
    declare @aa table (date datetime)  
    declare @i int  
    set @i=datediff(day,@Sdate,@Edate)  
    while(@i>=0)  
    begin  
    insert @aa   
    values (dateadd(day,@i,@Sdate))  
    set @i=@i-1  
    end  
    select @i= count(*)  from @aa where   datepart(weekday,date) not in (1,7)   
    return @i  
      
    end  
    --如:select dbo.A('2004-10-01','2004-10-11') 
    --返回结果为7
    --***********
    --输入第几周得到此周的开始、结束日期
    declare @FirstDayOfYear datetime--年頭
    declare @FirstDayWeekOfYear datetime --第一周的第一天
    declare @BDate datetime
    declare @EDate datetime
    select @FirstDayOfYear= dateadd(yy,datediff(yy,0,getdate()),0)                 
    select   @FirstDayWeekOfYear=@FirstDayOfYear  - datepart(dw, @FirstDayOfYear)+1
    select  @EDate=dateadd(ww,@week,@FirstDayWeekOfYear-1 )
    select @BDate=  dateadd(ww,-1,dateadd(dd,1,@EDate)  )
    SET @BDate =convert(datetime, convert(char(10),@BDate,101))      
    SET @EDate =convert(datetime, convert(char(10),@EDate,101))
    DECLARE @dt datetime
    SET @dt=GETDATE()

    DECLARE @number int
    SET @number=3

    --1.指定日期该年的第一天或最后一天
    --第一天为1月1日、最后一天为12月31日都是固定的

    --A. 年的第一天

    SELECT CONVERT(char(5),@dt,120)+'1-1'

    --B. 年的最后一天

    SELECT CONVERT(char(5),@dt,120)+'12-31'

    --2.指定日期所在季度的第一天或最后一天
    --A. 季度的第一天

     

    SELECT CONVERT(datetime,
     
    CONVERT(char(8),
      
    DATEADD(Month,
       
    DATEPART(Quarter,@dt)*3-Month(@dt)-2,
       
    @dt),
      
    120)+'1')

    --B. 季度的最后一天(CASE判断法)

    SELECT CONVERT(datetime,
     
    CONVERT(char(8),
      
    DATEADD(Month,
       
    DATEPART(Quarter,@dt)*3-Month(@dt),
       
    @dt),
      
    120)
     
    +CASE WHEN DATEPART(Quarter,@dtin(1,4)
      
    THEN '31'ELSE '30' END)

    --C. 季度的最后一天(直接推算法)

    SELECT DATEADD(Day,-1,
     
    CONVERT(char(8),
      
    DATEADD(Month,
       
    1+DATEPART(Quarter,@dt)*3-Month(@dt),
       
    @dt),
      
    120)+'1')

    --3.指定日期所在月份的第一天或最后一天
    --A. 月的第一天

     

    SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')

    --B. 月的最后一天

    SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')

    --4.指定日期所在周的任意一天

    SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)

    --5.指定日期所在周的任意星期几
    --A.  星期天做为一周的第1天

     

    SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)

    --B.  星期一做为一周的第1天

    SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt) 

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/andy_tigger/p/2343183.html
Copyright © 2011-2022 走看看