SQL Server日期计算

 更新时间:2007年03月12日 00:00:00   作者:  

去年的最后一天  
连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去3毫秒。  
SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))  
本月的最后一天  
现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“1900-01-01”返回的时间间隔上加1。通过加1个月,我计算出下个月的第一天,然后减去3毫秒,这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。  
SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))  
本年的最后一天  
你现在应该掌握这个的做法,这是计算本年最后一天脚本  
SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0))。  
本月的第一个星期一  
好了,现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。  
select  DATEADD(wk,  DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),  0)                          
在这个例子里,我使用了“本周的星期一”的脚本,并作了一点点修改。修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第6天,在计算中用本月的第6天来替换当前日期使得计算可以获得这个月的第一个星期一。  
总结  
我希望这些例子可以在你用DATEADD和DATEDIFF函数计算日期时给你一点启发。通过使用这个计算日期的时间间隔的数学方法,我发现为了显示两个日期之间间隔的有用历法是有价值的。注意,这只是计算出这些日期的一种方法。要牢记,还有很多方法可以得到相同的计算结果。假如你有其他的方法,那很不错,要是你没有,我希望这些例子可以给你一些启发,当你要用DATEADD和DATEDIFF函数计算你程序可能要用到的日期时。  
---------------------------------------------------------------  
附录,其他日期处理方法  
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))  

相关文章

  • sql IDENTITY_INSERT对标识列的作用和使用

    sql IDENTITY_INSERT对标识列的作用和使用

    本文主要介绍了sql IDENTITY_INSERT对标识列的作用和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • SQL中WITH AS的使用实现

    SQL中WITH AS的使用实现

    WITH AS短语,也叫做子查询部分,可以定义一个SQL片断,该SQL片断会被整个SQL语句用到,本文主要介绍了SQL中WITH AS的使用实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • SQL Server模糊查询的常见方法总结

    SQL Server模糊查询的常见方法总结

    这篇文章主要给大家介绍了关于SQL Server模糊查询的常见方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 通过SQLSERVER重启SQLSERVER服务和计算机的方法

    通过SQLSERVER重启SQLSERVER服务和计算机的方法

    为了实现远程重新启动,从而想到了用SQL语句命令实现这个功能,但是具体的命令格式给忘记了,找了点资料,把方法写在下面
    2010-09-09
  • SQL Server删除重复数据只保留一条的实现步骤

    SQL Server删除重复数据只保留一条的实现步骤

    在进行数据处理和数据分析的过程中,我们经常会遇到重复记录的问题,重复记录可能会导致数据不准确,也会增加数据处理的工作量,这篇文章主要给大家介绍了关于SQL Server删除重复数据只保留一条的实现步骤,需要的朋友可以参考下
    2024-01-01
  • SQL where条件和jion on条件的详解及区别

    SQL where条件和jion on条件的详解及区别

    这篇文章主要介绍了SQL where条件和jion on条件的详解及区别的相关资料,这里举例说明该如何区分,需要的朋友可以参考下
    2016-12-12
  • SQLServer中Partition By及row_number 函数使用详解

    SQLServer中Partition By及row_number 函数使用详解

    partition by关键字是分析性函数的一部分,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,本文给大家介绍SQLServer中Partition By及row_number 函数使用详解,需要的朋友参考下
    2015-11-11
  • SQL Server的触发器详解

    SQL Server的触发器详解

    本文详细讲解了SQL Server的触发器,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • SQL Server性能调优之缓存

    SQL Server性能调优之缓存

    本篇文章主要介绍了SQL Server性能调优中缓存的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • MSSQL 数据库同步教程

    MSSQL 数据库同步教程

    MSSQL数据同步利用数据库复制技术实现数据同步更新(来自网络,也是非常完美的教程)
    2009-11-11

最新评论