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)