SQL Server日期计算

2016-01-29 16:50 3 1 收藏

SQL Server日期计算,SQL Server日期计算

【 tulaoshi.com - SQLServer 】

    通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。 
    在使用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。第一天(DATEFIRST)设定决定了你的系统使用哪一天作为一周的第一天。所有以下的例子都是以星期天作为一周的第一天来建立,也就是第一天设置为7。假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相符合。你可以通过@@DATEFIRST函数来检查第一天设置。 
 
    为了理解这些例子,我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。要了解更多的DATEDIFF和DATEADD函数以及时间间隔可以阅读微软联机帮助。 
 
    使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。你必须从时间间隔这个方面来考虑。比如,从当前日期到你要得到的日期之间有多少时间间隔,或者,从今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。 
 
一个月的第一天 
 
    第一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意:这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔,然后进行加减来得到想要计算的日期。 
 
    这是计算一个月第一天的SQL  脚本: 
    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”。 
 
    这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的日期,这个技巧可以用来计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。 
 
  
本周的星期一 
 
     这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。 
 
     SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0) 
 
一年的第一天 
 
     现在用年(yy)的时间间隔来显示这一年的第一天。 
 
     SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0) 
 
季度的第一天 
 
     假如你要计算这个季度的第一天,这个例子告诉你该如何做。 
 
     SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0) 
 
当天的半夜 
 
     曾经需要通过getdate()函数为了返回时间值截掉时间部分,就会考虑到当前日期是不是在半夜。假如这样,这个例子使用DATEDIFF和DATEADD函数来获得半夜的时间点。 
 
     SELECT  DATEADD(dd,  DATEDIFF(dd,0,getdate()),  0) 
 
深入DATEDIFF和DATEADD函数计算 
 
     你可以明白,通过使用简单的DATEDIFF和DATEADD函数计算,你可以发现很多不同的可能有意义的日期。 
 
     目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔

来源:https://www.tulaoshi.com/n/20160129/1499627.html

延伸阅读
在本文中,简单说明这个子句,并提供一些代码实例,这是说明HAVING子句用法的最佳方法。 严格来说,HAVING并不需要一个子表,但没有子表的HAVING并没有实际意义。如果你只需要一个表,那么你可以用WHERE子句达到一切目的。为进行实践,HAVING预先假定至少两个表和一个基于第二个表的合计函数。 下面是一个简单的例子:你想要订单...
标签: 软件教程
FineReport一款很实用的报表软件,我们在使用FineReport报表的时候为了方便我们会进行日期自动计算。下面小编就为大家介绍一下FineReport报表怎么日期自动计算 如上图所示的报表中,多了一个年龄字段,而在数据库中没有这个字段,这就得通过日期的计算获得。 下面我们就来看一下用Java报表工具FineReport实现...
数据库是电子商务、金融以及ERP系统的基础,通常都保存着重要的商业伙伴和客户信息。大多数企业、组织以及政府部门的电子数据都保存在各种数据库中,他们用这些数据库保存一些个人资料,比如员工薪水、个人资料等等。数据库服务器还掌握着敏感的金融数据。包括交易记录、商业事务和帐号数据,战略上的或者专业的信息,比如专利和工程数据,...
标签: Web开发
strDBServerName = "." Set objSQLServer = CreateObject("SQLDMO.SQLServer") objSQLServer.LoginSecure = True objSQLServer.Connect strDBServerName objSQLServer.Shutdown
最近做一个项目(Asp.net+Sql Server 2000),在原来开发的机器上运行没有任何问题.但当我在另外一台机器上调试程序(本机调试)的时候,总出现“SQL Server不存在或访问被拒绝”。相信在任何一个搜索网站输入这样的检索词,一定会获得n多的页面。 总结起来的关于SQL Server连接中此类四个最常见错误错误解决方案如下: ...

经验教程

175

收藏

91
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部