设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> 数据库 >> SQL Server >> 正文
最新信息
·SQL2000做附加数据库时报:…
·数据库sql被挂马终极批量删…
·动网论坛全文索引建立帮助
·论坛不支持文章内容搜索的…
·打造抵御SQL注入攻击的MSS…
·10个保护SQL Server 2000安…
·sql server安全设置攻略
·SQL Server安全设置清单列…
·使用 SQL Server 时需要经…
·SQL中触发器实例讲解
资料搜索
热点信息
·如何压缩SQL Server 2000数…
·SQL中触发器实例讲解
·日志文件满而造成SQL数据库…
·10个保护SQL Server 2000安…
·使用 SQL Server 时需要经…
·SQL2000做附加数据库时报:…
·SQL SERVER的安全隐患:触…
·asp如何连接sql server并实…
·SQL Server不能启动的常见…
·一种简单的表中删除重复行…
推荐信息
·打造抵御SQL注入攻击的MSS…
·SQL Server数据库开发的二…
·Sqlserver 优化的方法
·SQLServer吞噬的内存解决办…
·SQL SERVER日志清除的两种…
·如何压缩SQL Server 2000数…
·SQL Server 2000 SP4发布
·动网论坛全文索引建立帮助
·10个保护SQL Server 2000安…
·SQL Server安全设置清单列…


Google
 
sql server中各种日期计算
〖编辑:Cloudy | 浏览:人次〗

1:每个月的第一天   
  SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 
     最核心的函数是getdate(),大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住:时期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。下一个函数是DATEADD,增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数,我们可以获得这个月的第一天。另外,计算出来的日期的时间部分将会是“00:00:00.000”。 
   
2:本周的星期一 
  SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 
  
3:一年的第一天  
  SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 
  
4:季度的第一天   
  SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 
  
5:当天的半夜   
  SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) 
  
6:上个月的最后一天 
  SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) 

7:去年的最后一天     
  SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) 
  
8:本月的最后一天   
  为了获得本月的最后一天,稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“1900-01-01”返回的时间间隔上加1。通过加1个月,我计算出下个月的第一天,然后减去3毫秒,这样就计算出了这个月的最后一天。 
  SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) 
  
9:本年的最后一天    
  SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。 
  
10:本月的第一个星期一  
 Select DATEADD(wk, DATEDIFF(wk,0,  dateadd(dd,6-datepart(day,getdate()),getdate())  ), 0) 
  在这个例子里,使用了“本周的星期一”的脚本,并作了一点点修改。修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第6天,在计算中用本月的第6天来替换当前日期使得计算可以获得这个月的第一个星期一。 

11:其他  
  1:去掉时分秒 
  declare @ datetime 
  set @ = getdate() --’2003-7-1 10:00:00’ 
  SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0) 
  
  2)显示星期几 
  select datename(weekday,getdate()) 
  
  3)如何取得某个月的天数 
  declare @m int 
  set @m=2 --月份 
  select datediff(day,’2003-’+cast(@m as varchar)+’-15’ ,’2003-’+cast(@m+1 as varchar)+’-15’) 
  另外,取得本月天数 
  select datediff(day,cast(month(GetDate()) as varchar)+’-’+cast(month(GetDate()) as varchar)+’-15’ ,cast(month(GetDate()) as varchar)+’-’+cast(month(GetDate())+1 as varchar)+’-15’) 
  或者使用计算本月的最后一天的脚本,然后用DAY函数区最后一天 
  SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))) 
  
  4)判断是否闰年: 
  SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then ’平年’ else ’闰年’ end 
  或者 
  select case datediff(day,datename(year,getdate())+’-02-01’,dateadd(mm,1,datename(year,getdate())+’-02-01’)) 
  when 28 then ’平年’ else ’闰年’ end 
  
  5)一个季度多少天 
  declare @m tinyint,@time smalldatetime 
  select @m=month(getdate()) 
  select @m=case when @m between 1 and 3 then 1 
  when @m between 4 and 6 then 4 
  when @m between 7 and 9 then 7 
  else 10 end 
  select @time=datename(year,getdate())+’-’+convert(varchar(10),@m)+’-01’ 
  select datediff(day,@time,dateadd(mm,3,@time))


     6)在两个日期范围里所跨越那几周返回如: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

   7):在日期范围里减去周六、周日的天数
    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

   8);输入第几周得到此周的开始、结束日期
     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))


录入时间:2007-01-16 21:48:27 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号