多语言展示
当前在线:641今日阅读:103今日分享:49

【SQL Server】时间算法语句详解

接触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) 。

注意事项

其他时间算法语句以及其他相关的经验,会在稍后推出,大家也不需要太着急,先将这些慢慢消化,真正的弄懂以后,而且会举一反三的时候,再学习其他的也不晚哦~

推荐信息