8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

SQL Server的时间算法语句详解

IT171中文网 管理员组 2013-7-25 609

接触SQL有2,3年的光景了,对于一些数据库的操作还是有自己的一些见解,与其说是经验,不如说自己比较喜欢的编写风格,那开启sql之旅的第一站,我想来说一下时间的算法语句,虽然时间字段在数据库表中经常出现,但对于时间字段的操作很多人只是停留在一个调取显示的阶段,与其抱着一味的getDate()不放手,不如找点新鲜的东西,让自己的程序用户体验性更高一些,希望接下来的经验能够对于大家有所帮助。





工具/原料


  • sql server 2005


前一天/后一天


  • 1
    对于最基本的sql查询格式,我不想再过多的解释,本身sql要求就是这样,就这么简单,这个模块主要来说一下前一天和后一天的算法语句,首先,我们来定义一个时间字段的参数,暂且命名为Date,语句为:declare @Date datetime


  • 2
    接下来,我们给@Date这个参数进行赋值,还是大家比较熟悉的getDate(),语句为: set @Date=getDate()。


  • 3
    接下来就是最主要的部分了,如何去进行时间的计算呢,这里先介绍一个函数,就是dateAdd(),DATEADD() 函数在日期中添加或减去指定的时间间隔,语法为:DATEADD(datepart,number,date),datepart参数是合法的日期表达式。number是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。



  • 4
    接下来,我们来些一下计算前一天的算法语句:select dateAdd(day,-1,@Date) as 'Yesterday',这里的as后面的内容只是定义查询出来列的名称而已。



  • 5
    最后,我们来执行一下这个查询语句。


  • 6
    后一天的算法语句如出一辙,只是需要将dateAdd中的时间间隔数进行一下调整即可。





月初的算法语句


  • 1
    月初,顾名思义就是月的第一天,接下来,我们就来看一下,如何计算给定日期所在月的第一天。技巧就在于我们应该先计算当前日期到“1900-01-01”的时间间隔数,然后把这个间隔数再加到“1900-01-01”上来获得特殊的日期。
  • 2
    那如何来计算当前日期到“1900-01-01”的时间间隔数,这里我们就需要用到另外一个函数了,那就是datediff()。datediff()函数是返回两个日期之间的间隔。
    语法
    DATEDIFF ( date-part, date-expression-1, date-expression-2 )
    date-part :
    year | quarter | month | week | day | hour | minute | second | millisecond
    参数
    date-part 指定要测量其间隔的日期部分。
    有关日期部分的详细信息,请参见日期部分。
    date-expression-1 某一间隔的起始日期。从 date-expression-2 中减去该值,返回两个参数之间 date-parts 的天数。
    date-expression-2 某一间隔的结束日期。从该值中减去 Date-expression-1,返回两个参数之间 date-parts 的天数。
    用法
    此函数计算两个指定日期之间日期部分的数目。结果为日期部分中等于(date2 - date1)的有符号的整数值。
    当结果不是日期部分的偶数倍时,DATEDIFF 将被截断而不是被舍入。
    当使用 day 作为日期部分时,DATEDIFF 返回两个指定的时间之间(包括第二个日期但不包括第一个日期)的午夜数。
    当使用 month 作为日期部分时,DATEDIFF 返回两个日期之间(包括第二个日期但不包括第一个日期)出现的月的第一天的数目。
    当使用 week 作为日期部分时,DATEDIFF 返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。



  • 3
    由上可知,month作为日期部分出现时,返回的是出现月的第一天的数目,其实也就是月数。接下来,我们利用这个月数,再使用dateAdd()函数,进行一个计算。



  • 4
    以month为日期部分,系统将不再精确到时分秒了。


  • 5
    根据SQL Server的时间表示方式可知,'1900-01-01' 可以用0代替,所以我们的算法语句就更为简单了。



  • 6
    那如果我们想保留时分秒,该如何做呢?这里我们就需要用到另外一个函数了,就是datepart()。DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。也不多说了,直接上图,关键在于大家亲自去编写。


  • 7
    利用datepart()函数这个用法,我们就大概能够思考到这么一个思路:用给定日期减去月第一天与给定日期差的天数,为什么呢?因为day作为日期出现时,是可以精确到时分秒的哦。语句为:select dateAdd(day,1-datepart(day,@Date),@Date) 。





注意事项


  • 其他时间算法语句以及其他相关的经验,会在稍后推出,大家也不需要太着急,先将这些慢慢消化,真正的弄懂以后,而且会举一反三的时候,再学习其他的也不晚哦~
  • 转载来自:互联网
最新回复 (19)
全部楼主
  • aizaixiyan 二级用户组@Ta 2014-6-22
    引用 2
    [该用户未绑定手机,内容不能显示]
  • msgpycpv89 二级用户组@Ta 2014-6-22
    引用 3
    [该用户未绑定手机,内容不能显示]
  • 已认证 游客 游客组@Ta 2014-7-28
    引用 4
    [该用户未绑定手机,内容不能显示]
  • 已认证 游客 游客组@Ta 2014-8-21
    引用 5
    [该用户未绑定手机,内容不能显示]
  • 已认证 游客 游客组@Ta 2014-9-16
    引用 6
    [该用户未绑定手机,内容不能显示]
  • 安达电子 一级用户组@Ta 2014-11-23
    引用 7
    [该用户未绑定手机,内容不能显示]
  • 悠优克 一级用户组@Ta 2015-2-22
    引用 8
    [该用户未绑定手机,内容不能显示]
  • ludaxia 一级用户组@Ta 2015-4-13
    引用 9
    [该用户未绑定手机,内容不能显示]
  • za502 二级用户组@Ta 2015-5-3
    引用 10
    [该用户未绑定手机,内容不能显示]
  • zxljake 一级用户组@Ta 2015-5-7
    引用 11
    [该用户未绑定手机,内容不能显示]
  • 猫小灰 二级用户组@Ta 2015-5-18
    引用 12
    [该用户未绑定手机,内容不能显示]
  • 金帝科技 二级用户组@Ta 2015-5-21
    引用 13
    [该用户未绑定手机,内容不能显示]
  • 460082723 一级用户组@Ta 2015-6-12
    引用 14
    [该用户未绑定手机,内容不能显示]
返回
发新帖
我也是有底线哒~