比较 DATEADD 和 DATEDIFF

DATEADD 函数向指定日期添加一段时间间隔。例如,如果 titles 表中所有书籍的发行日期都推迟三天,则可使用以下语句获得新的发行日期:

USE pubs
SELECT DATEADD(day, 3, pubdate)
FROM titles

如果日期参数的数据类型是 smalldatetime,则结果的数据类型也是 smalldatetime。可以使用 DATEADD 对 smalldatetime 值添加秒或毫秒,但只有当 DATEADD 返回的结果日期至少改变了 1 分钟时,这样做才有意义。

DATEDIFF 函数计算指定的两个日期中第二个日期与第一个日期之间各日期部分相差的时间量。换句话说,它得出两个日期之间的间隔。结果是等于 date2 - date1 的带符号整数值,以各日期部分为单位。

下面的查询使用日期 1995 年 11 月 30 日,并得出 pubdate 和该日期之间相差的天数。

USE pubs
SELECT DATEDIFF(day, pubdate, 'Nov 30 1995')
FROM titles

对于 titles 中 pubdate 为 1995 年 10 月 21 日的行,上述查询生成的结果为 40。(10 月 21 日和 11 月 30 日之间相差 40 天。)要计算以月为单位的间隔,请使用以下查询:

USE pubs
SELECT interval = DATEDIFF(month, pubdate, 'Nov 30 1995')
FROM titles

该查询对 pubdate 值在 10 月的行生成的值为 1,对 pubdate 值在 6 月的行生成的值为 5。

若 DATEDIFF 函数中的第一个日期晚于指定的第二个日期,则产生的结果为负数。由于 titles 中有两行使用 GETDATE 函数指派 pubdate 的值,所以这些值被设置为 pubs 数据库的创建日期,这样在前面的两个查询中这两行返回负数。

如果一个或两个日期参数是 smalldatetime 值,它们将在内部转换为 datetime 值进行计算。为了进行计算,smalldatetime 值中的秒和毫秒将自动设置为 0。

请参见

CAST 和 CONVERT

DATENAME

日期和时间函数

DATEPART

DATEADD

GETDATE

DATEDIFF

SET DATEFORMAT