
6.4 日期和时间函数
日期和时间函数主要用来处理日期和时间值,本节将介绍各种日期和时间函数的功能和用法。一般的日期函数除了使用date类型的参数外,也可以使用datetime类型的参数,但会忽略这些值的时间部分。相同地,以time类型值为参数的函数,可以接受datetime类型的参数,但会忽略日期部分。
6.4.1 获取系统当前日期的函数GETDATE()

GETDATE()函数用于返回当前数据库系统的日期和时间,返回值的类型为datetime。
【例6-38】使用日期函数获取系统当前日期,输入语句如下:
SELECT GETDATE();
执行结果如图6-38所示。

图6-38 GETDATE()函数
这里返回的值为笔者计算机上的当前系统时间。
6.4.2 返回UTC日期的函数GETUTCDATE()

GETUTCDATE ()函数返回当前UTC(世界标准时间)日期值。
【例6-39】使用GETUTCDATE()函数返回当前UTC日期值,输入语句如下:
SELECT GETUTCDATE();
执行结果如图6-39所示。

图6-39 GETUTCDATE()函数
对比GETDATE()函数的返回值,可以看到,因为读者位于东8时区,所以当前系统时间比UTC提前8个小时,这里显示的UTC时间需要减去8个小时的时差。
6.4.3 获取天数的函数DAY(d)

DAY(d)函数用于返回指定日期的d是一个月中的第几天,范围是1~31,该函数在功能上等价于DATEPART(dd,d)。
【例6-40】使用DAY()函数返回指定日期中的天数,输入语句如下:
SELECT DAY('2018-11-12 01:01:01');
执行结果如图6-40所示。

图6-40 DAY()函数
返回结果为12,即11月中的第12天。
6.4.4 获取月份的函数MONTH(d)

MONTH(d)函数返回指定日期d中月份的整数值。
【例6-41】使用MONTH()函数返回指定日期中的月份,输入语句如下:
SELECT MONTH('2018-04-12 01:01:01');
执行结果如图6-41所示。

图6-41 MONTH()函数
6.4.5 获取年份的函数YEAR(d)
YEAR(d)函数返回指定日期d中年份的整数值。
【例6-42】使用YEAR()函数返回指定日期对应的年份,输入语句如下:
SELECT YEAR('2020-02-03'),YEAR('2018-02-03');
执行结果如图6-42所示。

图6-42 YEAR()函数
6.4.6 获取日期中指定部分字符串值的函数DATENAME(dp,d)
DATENAME(dp,d)根据dp指定返回日期中相应部分的值,例如,YEAR返回日期中的年份值,MONTH返回日期中的月份值,dp其他可以取的值有quarter、dayofyear、day、week、weekday、hour、minute、second等。
【例6-43】使用DATENAME()函数返回日期中指定部分的日期字符串值,输入语句如下:

执行结果如图6-43所示。

图6-43 DATENAME()函数
由结果可以看到,这里的三个DATENAME()函数分别返回指定日期值中的年份值、星期值和该日是一年中的第几天。
6.4.7 获取日期中指定部分的整数值的函数DATEPART(dp,d)
DATEPART(dp,d)函数返回指定日期中相应部分的整数值。dp的取值与DATENAME函数中的相同。
【例6-44】使用DATEPART()函数返回日期中指定部分的整数值,输入语句如下:

执行结果如图6-44所示。

图6-44 DATEPART()函数
6.4.8 计算日期和时间的函数DATEADD(dp,num,d)
DATEADD(dp,num,d)函数用于执行日期的加运算,返回指定日期值加上一个时间段后的新日期。dp指定日期中进行加法运算的部分值,例如,year、month、day、hour、minute、second、millisecond等;num指定与dp相加的值,如果该值为非整数值,将舍弃该值的小数部分;d为执行加法运算的日期。
【例6-45】使用DATEADD()函数执行日期加操作,输入语句如下:

执行结果如图6-45所示。

图6-45 DATEADD()函数
DATEADD(year,1,'2018-11-12 01:01:01')表示年值增加1,2018加1之后为2019;DATEADD(month,2,'2018-11-12 01:01:01')表示月份值增加2,11月增加2个月之后为1月,同时,年值增加1,结果为2019-01-12;DATEADD(hour,1,'2018-11-12 01:01:01')表示时间部分的小时数增加1。