SQL语句中的日期时间函数非常灵活。
不论是Access还是SQLServer,都可以直接通过Year、Month、Day三个函数获取日期中的年份、月度和具体的日期数,Access甚至还能用WeekDay及Hour、Minute、Second等函数直接得到日期时间中的星期数和时、分、秒。
除了上述几个最常见的日期时间函数外,其他常用函数如下表:
由上表可以看出,DatePart函数非常强大,不仅可以返回年月日和时分秒,还能返回季度、星期等。除了返回小时数的用法略有不同外,其他各种返回值在Access和SQLServer中的用法都是完全一致的。其中,星期数以星期日为一周的开始,从星期日到星期六的返回值分别是1-7。
当在Access中使用DatePart函数时,第一个参数必须使用单引号或双引号;在SQLServer中使用时,则只能用双引号或不用引号。
至于系统日期和时间,Access是通过Date、Time和Now三个函数分别获取的,而SQLServer则全部使用的GetDate函数。该函数默认仅返回系统日期,如要同时返回时间还需Convert数据类型转换函数的配合。
DateAdd函数用于返回相加后的日期,它包含3个参数:第1个是指相加日期的类型,可选项包括DatePart函数所能返回的10种类型;第2个参数表示相加的数值,正数表示后面的日期,负数表示前面的日期;第3个参数为日期列或日期类型表达式。例如下面的2个表达式:
DateAdd("m",3,[日期])
DateAdd("m",-3,[日期])
由于这里相加的类型是“m”,当指定3时,将在日期列的基础上加3个月;当指定-3时,则减3个月。
DateDiff函数用于返回两个日期时间的间隔数,它同样包括3个参数:第1个参数的意义与DateAdd中的同位置参数相同,第2个参数表示起始日期,第3个参数表示结束日期。例如,以下语句的返回值为129,表明两个日期之间相差129天:
DateDiff("d",'2012-3-5','2012-7-12')
这里有个特殊情况:当把第1个参数改为“w”时,表示计算两个日期之间相差多少周。经测试,同样的语句在Access中得到的值为18,这是正确的;但SQLServer中的值却为129。如果改为“ww”,则两种数据库的返回值都是18。因此,当需要在SQLServer中对日期进行以“周”为单位的相加或间隔运算时,一定要使用“ww”而不是“w”!
再如,要对最近两个月的数据进行处理,可在条件判断函数中使用如下语句:
datediff("m", [日期], date()) < 2 'Access的写法
datediff("m", [日期], getdate()) < 2 'SQLServer的写法