DATEDIFF
以指定的间隔返回两个日期之间的时间跨度。 DATEDIFF
在其计算中不包括开始日期。
行为类型
语法
DATEDIFF ( datepart, start, end );
参数
- datepart
- 指定
DATEDIFF
返回的日期或时间间隔类型。如果 datepart 为表达式,则必须用括号括起来:DATEDIFF((expression), start, end;
datepart 的求值结果必须为以下字符串字面量之一,无论带引号还是不带引号:
-
year
|yy
|yyyy
-
quarter
|qq
|q
-
month
|mm
|m
-
day
|dayofyear
|dd
|d
|dy
|y
-
week
|wk
|ww
-
hour
|hh
-
minute
|mi
|n
-
second
|ss
|s
-
millisecond
|ms
-
microsecond
|mcs
|us
-
-
start, end
- 指定开始日期和结束日期,其中 start 和 end 的求值结果为以下数据类型之一:
如果 end < start,则
DATEDIFF
返回负值。注意
如果 datepart 设置为year
、quarter
或month
,则TIME
和INTERVAL
数据类型对开始日期和结束日期无效。
兼容开始日期和结束日期数据类型
下表显示了可匹配为开始日期和结束日期的数据类型:
例如,如果将开始日期设置为 INTERVAL
数据类型,则结束日期也必须为 INTERVAL
,否则 Vertica 将返回错误:
SELECT DATEDIFF(day, INTERVAL '26 days', INTERVAL '1 month ');
datediff
----------
4
(1 row)
日期部分间隔
DATEDIFF
使用 datepart 实参计算两个日期之间的间隔数,而不是二者之间的实际时间量。 DATEDIFF
使用以下截止点计算这些间隔:
-
year
:1 年 1 月 -
quarter
:1 月 1 日、4 月 1 日、7 月 1 日、10 月 1 日 -
month
:当月的第一天 -
week
:周日午夜 (24:00)
例如,如果 datepart 设置为 year
,则 DATEDIFF
使用 1 月 1 日计算两个日期之间的年数。以下 DATEDIFF
语句将 datepart 设置为 year
,并将时间跨度指定为 2005 年 1 月 1 日到 2008 年 6 月 15 日:
SELECT DATEDIFF(year, '01-01-2005'::date, '12-31-2008'::date);
datediff
----------
3
(1 row)
DATEDIFF
在计算间隔时始终排除开始日期 — 在本例中为 2005 年 1 月 1。 DATEDIFF
计算过程中只考虑开始日历年,因此本例中只计算 2006、2007 和 2008 年。函数返回 3,尽管实际时间跨度接近四年。
如果将开始日期和结束日期分别更改为 2004 年 12 月 31 日和 2009 年 1 月 1 日,则 DATEDIFF
还会计算 2005 年和 2009 年。这一次,返回 5,尽管实际时间跨度刚刚超过四年:
=> SELECT DATEDIFF(year, '12-31-2004'::date, '01-01-2009'::date);
datediff
----------
5
(1 row)
同样,DATEDIFF
在计算两个日期之间的月数时使用月份开始日期。因此,在以下语句中,DATEDIFF
计算 2 月到 9 月之间的月份并返回 8:
=> SELECT DATEDIFF(month, '01-31-2005'::date, '09-30-2005'::date);
datediff
----------
8
(1 row)