![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=1739154598-Fr29FZU9TsdH8CYzhRu0kakfod71rCgZ-0-3305505d6844d6a12ae92175f2bdc2aa)
GETDATE()函数用于返回当前数据库系统的日期和时间,返回值的类型为datetime。
【例6-38】使用日期函数获取系统当前日期,输入语句如下:
SELECT GETDATE();
执行结果如图6-38所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P86_10296.jpg?sign=1739154598-H3cMpuYSGr90AntfJL9g8x30j6vCpINE-0-a503b7df51c3555cbc0b7a25523488f0)
图6-38 GETDATE()函数
这里返回的值为笔者计算机上的当前系统时间。
6.4.2 返回UTC日期的函数GETUTCDATE()
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P86_10307.jpg?sign=1739154598-jl1c6kRKLNwodyublOJVecmuVRAECQ8m-0-6557f55ba74d7b13dd12c71d2d873ded)
GETUTCDATE ()函数返回当前UTC(世界标准时间)日期值。
【例6-39】使用GETUTCDATE()函数返回当前UTC日期值,输入语句如下:
SELECT GETUTCDATE();
执行结果如图6-39所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P86_10304.jpg?sign=1739154598-DUov4kPZM3q26w82eGxN6tFYsVRCn7X8-0-6500d2569a08a1715dd769263b4b1c04)
图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=1739154598-qeWg66GjRJzyuRXKxk8R6etySLxQNmLr-0-966136e73b91cfe8ec5dcc4c4328d4ec)
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=1739154598-2XHpVCEy1D08fZnEFg2pmpIjNvhgP2b0-0-b75145fbab6f21901de8ccc9cd893b1b)
图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=1739154598-tde5qvf4JnO13YUj0ZuX7szJFFblK77U-0-693c7eb5ca3d3508bf2eb082d8a4a072)
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=1739154598-1lJluAfACDFhflXf1Hhdf32xMRpsx2jV-0-c209a14458e973d6aa72cd1806494ce4)
图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=1739154598-hJJzsgJlXmVO9h4Qsq5a7RkYUaracpQM-0-22dda042587227ed1ccd08b11106b75c)
图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=1739154598-eWChJAapN42EDNZc5LL46VCh5v0Hgn0B-0-d0840386a571d4355c74bfaf8c86a556)
执行结果如图6-43所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P87_10388.jpg?sign=1739154598-WRP6OsVfshzlSPF1fSFRyN808QRI9vJf-0-ea4b71b55bdc8fbc1dd21f2abf3cceae)
图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=1739154598-6Mi8MYobYbEjiJ1ZJ0E0QnHXQcYpA1un-0-afa89a58766dac5b87350973af70377c)
执行结果如图6-44所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P88_10455.jpg?sign=1739154598-ebkrWfm6bdfjbsQagrpzx6A8YNmWLlVg-0-3d5b5c8d016e797db66bac2502f60725)
图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=1739154598-sQxiz8sf2fXA8ugHRVeigOfhw6UmAS1N-0-a5d001129dd8131f3a0118a87fbf2ce4)
执行结果如图6-45所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P88_10463.jpg?sign=1739154598-5bDggpBckHDHxb5IfKbeO1UkWaCaO83z-0-81d085004e5f422c055f66bb5892358b)
图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。