DATEDIFF (Transact-SQL)
Returns the count of the specified datepart boundaries between two specified dates.
Syntax
DATEDIFF ( datepart , startdate , enddate )
Parameters
Parameter | Description |
---|---|
datepart |
The part of the date that is returned by the function. The following values are valid for the datepart argument. |
startdate |
The starting date of the interval. startdate must be a valid date or datetime expression. |
enddate |
The ending date of the interval. enddate must be a valid date or datetime expression. |
Return Value
An integer representing the number of datepart boundaries crossed between startdate
and enddate
. The return value is a signed integer. The sign depends on whether enddate
is earlier or later than startdate
.
Supported datepart
Values
The following table lists the valid arguments for the datepart
parameter.
Abbreviation | datepart |
Alias | Range |
---|---|---|---|
yy |
year |
yyyy , yy |
1753 through 9999 |
qq |
quarter |
qq , q |
1 through 4 |
mm |
month |
mm , m |
1 through 12 |
yy |
year |
yyyy , yy |
1753 through 9999 |
dd |
day |
dd , d |
1 through 31 |
wk |
week |
wk , ww |
1 through 53 |
dw |
dayofyear |
dayofyear , dy , y |
1 through 366 |
hh |
hour |
hh , h |
0 through 23 |
mi |
minute |
mi , n |
0 through 59 |
ss |
second |
ss , s |
0 through 59 |
ms |
millisecond |
ms |
0 through 999 |
mcs |
microsecond |
mcs |
0 through 999999 |
ns |
nanosecond |
ns |
0 through 999999999 |
Examples
Example 1: Calculating the difference in days
SELECT DATEDIFF(day, '2023-10-26', '2023-11-10');
This will return 15.
Example 2: Calculating the difference in months
SELECT DATEDIFF(month, '2023-01-15', '2023-03-20');
This will return 2.
Example 3: Calculating the difference in years
SELECT DATEDIFF(year, '2020-07-01', '2023-01-01');
This will return 3.
Example 4: Using variables
DECLARE @StartDate DATE = '2024-01-01';
DECLARE @EndDate DATE = '2024-06-15';
SELECT DATEDIFF(week, @StartDate, @EndDate);
This will return 24.
Note:
DATEDIFF
counts the number of boundaries crossed. It does not return the total time elapsed divided by the datepart's length. For example, DATEDIFF(day, '2023-10-31 23:59:59', '2023-11-01 00:00:01')
returns 1, even though only two seconds have passed.
Tip: When calculating the difference between two dates, ensure that the
enddate
is later than the startdate
if you expect a positive result. If startdate
is later than enddate
, the result will be negative.