![SQL Server 从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/709/27111709/b_27111709.jpg)
6.4 日期和时间函数
日期和时间函数主要用来处理日期和时间值,本节将介绍各种日期和时间函数的功能和用法。一般的日期函数除了使用date类型的参数外,也可以使用datetime类型的参数,但会忽略这些值的时间部分。相同地,以time类型值为参数的函数,可以接受datetime类型的参数,但会忽略日期部分。
6.4.1 获取系统当前日期的函数GETDATE()
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P86_10308.jpg?sign=1739290102-heEsB1gafm3GGa81zpU6V8Ge0fh91UJK-0-020cb2103eb8dbf52117eb64b458e164)
GETDATE()函数用于返回当前数据库系统的日期和时间,返回值的类型为datetime。
【例6-38】使用日期函数获取系统当前日期,输入语句如下:
SELECT GETDATE();
执行结果如图6-38所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P86_10296.jpg?sign=1739290102-FnGZTa7ReLkUSTDyRHySOeZM3igGHSBD-0-31ce349335b2bd551be8a5352609087b)
图6-38 GETDATE()函数
这里返回的值为笔者计算机上的当前系统时间。
6.4.2 返回UTC日期的函数GETUTCDATE()
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P86_10307.jpg?sign=1739290102-0wZM3kxgwmXUYe5gSaxpLjx7qL75xgcy-0-474a19ac1fdf52ac23baa62397044f77)
GETUTCDATE ()函数返回当前UTC(世界标准时间)日期值。
【例6-39】使用GETUTCDATE()函数返回当前UTC日期值,输入语句如下:
SELECT GETUTCDATE();
执行结果如图6-39所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P86_10304.jpg?sign=1739290102-K9bsNwzSH2eumyOVzYNGogVhxp9ehlAa-0-370ece0ae14a93047d6d614cec5ae8f8)
图6-39 GETUTCDATE()函数
对比GETDATE()函数的返回值,可以看到,因为读者位于东8时区,所以当前系统时间比UTC提前8个小时,这里显示的UTC时间需要减去8个小时的时差。
6.4.3 获取天数的函数DAY(d)
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P87_10392.jpg?sign=1739290102-yu9lihurAsC09MiiBD8MJDbWYSqQxi0U-0-89381c6b2f7252f63e231d8431f68a84)
DAY(d)函数用于返回指定日期的d是一个月中的第几天,范围是1~31,该函数在功能上等价于DATEPART(dd,d)。
【例6-40】使用DAY()函数返回指定日期中的天数,输入语句如下:
SELECT DAY('2018-11-12 01:01:01');
执行结果如图6-40所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P87_10364.jpg?sign=1739290102-QXvkLSDJZ9pygODvJK4R5wKaezZLED10-0-5f2cde9e094382a4c169683d28f68240)
图6-40 DAY()函数
返回结果为12,即11月中的第12天。
6.4.4 获取月份的函数MONTH(d)
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P87_10391.jpg?sign=1739290102-zFTBuX8HSn7nzVlGVZTqSoI9alLFsgTx-0-15ac59ee7e9888c597c340052f3f8a40)
MONTH(d)函数返回指定日期d中月份的整数值。
【例6-41】使用MONTH()函数返回指定日期中的月份,输入语句如下:
SELECT MONTH('2018-04-12 01:01:01');
执行结果如图6-41所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P87_10372.jpg?sign=1739290102-eUMsoqkhT0NW4ZBxCCUbyLUCeedXNvvx-0-5e6afb1fb6f2f3e812073c3854a539ef)
图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所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P87_10380.jpg?sign=1739290102-yRaNuC3QTNTggZPWhiw7A4HiHe80Ahnu-0-2c5d00d67649952d0a04f24338aad38a)
图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()函数返回日期中指定部分的日期字符串值,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P87_37620.jpg?sign=1739290102-1SamIDerjiPqlMEedBjgbDeW07doHxee-0-b582274d40cacedabb5a2e5bb3e4cbca)
执行结果如图6-43所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P87_10388.jpg?sign=1739290102-bxlYw2fPSUNYdRtTxYx4jxZGGmzNccY8-0-c93c46ef99dd3846fedb7565d43231f8)
图6-43 DATENAME()函数
由结果可以看到,这里的三个DATENAME()函数分别返回指定日期值中的年份值、星期值和该日是一年中的第几天。
6.4.7 获取日期中指定部分的整数值的函数DATEPART(dp,d)
DATEPART(dp,d)函数返回指定日期中相应部分的整数值。dp的取值与DATENAME函数中的相同。
【例6-44】使用DATEPART()函数返回日期中指定部分的整数值,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P88_37622.jpg?sign=1739290102-33Ng3jh520uJgQNEAmcxSoZLHq6hPg8D-0-d407ef95d88594a775a061e544ca15aa)
执行结果如图6-44所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P88_10455.jpg?sign=1739290102-xgf1hks5NQMXrilyciNHdTqUAB18uCZs-0-5f2d0adfd94b44ec24b891d2df4edbed)
图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()函数执行日期加操作,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P88_37623.jpg?sign=1739290102-rk8h0YF901Fyk47WuQYSKH93X3spN7Ky-0-8a21f25aecb16d10e021ba8323fc7dd8)
执行结果如图6-45所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P88_10463.jpg?sign=1739290102-fryWRS4teW6jUzMSeJvP52dJWPC9IT3P-0-5b1388d0bfd76eaa18eb63b611fd5cf3)
图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。