SQL日期和时间函数

简介:本文将介绍在数据库中,如何使用SQL日期和时间函数对时间进行处理。

1 DATEADD()函数

此函数将数字(有符号整数)添加到输入日期的日期部分,并返回修改后的日期/时间值。

1.1 函数语法

1
DATEADD (datepart, number ,date)

datepart
要增加日期/时间的单位。下表列出了一些常用的datepart参数。

datepart 缩写形式
year yy,yyyy
month mm,m
day dd,d
week wk,ww
weekday dw,w
hour hh
minute mi,n
second ss,s
quarter qq,q

提示

quarter为一季度。

number
一个表达式,若为小数将截断小数部分。

date
修改前的日期。

1.2 函数用法

当前日期往后推1年:

1
2
SELECT GETDATE()			--当前时间:2021-12-25 01:37:10.537
SELECT DATEADD(YEAR,1,GETDATE()) --计算后时间:2022-12-25 01:37:10.537

当前时间往前推5小时:

1
2
SELECT GETDATE()			--当前时间:2021-12-25 01:40:11.030
SELECT DATEADD(HOUR,-5,GETDATE()) --计算后时间:2021-12-24 20:40:11.030

2 DATEDIFF()函数

此函数返回指定开始时间和结束时间之间的时间跨度。

2.1 函数语法

1
DATEDIFF (datepart ,startdate ,enddate)

datepart
要返回时间跨度的单位。下表列出了一些常用的datepart参数。

datepart 缩写形式
year yy,yyyy
month mm,m
day dd,d
week wk,ww
hour hh
minute mi,n
second ss,s
quarter qq,q

提示

quarter为一季度。

startdate
开始时间。

enddate
结束时间。

注意

1、DATEDIFF()函数返回值为int

2、使用函数请尽可能使用四位数年份。

2.2 函数用法

1
2
3
4
SELECT DATEDIFF(YEAR,'2020-11-27 23:49:13.660','2021-12-27 08:49:30.220')	--运行结果:1
SELECT DATEDIFF(MONTH,'2020-11-27 23:49:13.660','2021-12-27 08:49:30.220') --运行结果:13
SELECT DATEDIFF(DAY,'2020-11-27 23:49:13.660','2021-12-27 08:49:30.220') --运行结果:395
SELECT DATEDIFF(MINUTE,'2021-12-27 08:00:30.220','2021-12-27 08:49:30.220') --运行结果:49

3 DATEPART()函数

此函数返回指定日期的指定部分整数。

3.1 函数语法

1
DATEPART ( datepart , date )

datepart
返回表示 date 参数的特定部分的整数。下表列出了一些常用的datepart参数。

datepart 缩写形式
year yy,yyyy
month mm,m
day dd,d
week wk,ww
hour hh
minute mi,n
second ss,s
quarter qq,q

提示

quarter为一季度。

date
需要获取的日期。

3.2 函数用法

1
2
3
4
SELECT DATEPART(YEAR,'2021-12-28 02:13:37.010')		--运行结果:2021
SELECT DATEPART(WEEK,'2021-12-28 02:13:37.010') --运行结果:53
SELECT DATEPART(WEEKDAY,'2021-12-28 02:13:37.010') --运行结果:3
SELECT DATEPART(SECOND,'2021-12-28 02:13:37.010') --运行结果:37

值得注意的是:
1、datepartWEEK时,返回的结果为这一年的第几周;
2、datepartWEEKDAY时,返回的是星期几(星期日为第一天),故星期二会返回3

4 DATENAME()函数

此函数返回表示指定日期的指定格式的字符串(nvarchar)。

4.1 函数语法

1
DATENAME ( datepart , date )

DATENAME()DATEPART()函数参数类似。

4.2 函数语法

1
2
SELECT DATENAME(YEAR,'2021-12-28 00:57:00.123')		--运行结果:2021
SELECT DATENAME(WEEKDAY,'2021-12-28 00:57:00.123') --运行结果:星期二

值得注意的是:
1、DATEPART()函数返回的数据类型为int,而DATENAME()函数返回的数据类型为nvarchar
2、datepartWEEKDAY时,DATEPART()函数返回数值3,而DATENAME()函数返回字段星期二

5 参考资料

微软官方文档:https://docs.microsoft.com/zh-cn/sql/t-sql/functions/dateadd-transact-sql?view=sql-server-ver15