Dates and times are essential to many applications, and managing them can be a challenging task. When working with T-SQL, a common need is to perform calculations with dates.

One of the most common calculations is to subtract two dates, which can be useful in determining the duration between two events, calculating the due date for a task, or finding the date of an event that occurred a certain number of days ago. In this article, we will explore how to subtract dates in T-SQL using the DATEADD() function.

## Using the DATEADD() Function

T-SQL provides a built-in function called DATEADD() that allows us to add or subtract a specified number of date/time units to a given date. This function takes three parameters:

- The date/time unit to add or subtract (e.g., year, month, day, hour, minute, second).
- The number of units to add or subtract. The value can be positive (to add) or negative (to subtract).
- The starting date.

For example, the following query subtracts one year from the current date:

`SELECT DATEADD(year, -1, GETDATE());`

This query returns a date that is one year before the current date. We can replace year with other date/time units to subtract other time periods.

### Syntax of the DATEADD() Function

The syntax of the DATEADD() function is as follows:

`DATEADD(date/time unit, date/time unit value, date expression)`

The date/time unit is a string literal that specifies the date/time unit to add or subtract. It can be one of the following:

- year
- quarter
- month
- week
- day
- hour
- minute
- second
- millisecond
- microsecond
- nanosecond

The date/time unit value is an integer that specifies the number of units to add or subtract.

The value can be positive (to add) or negative (to subtract). The date expression is the starting date to which we want to add or subtract the specified number of units.

It can be a column from a table, a variable, or the result of another function. For example, the following query subtracts two months from the hire date of employees whose job title is ‘Developer’ and returns the result in the format ‘YYYY-MM-DD’:

```
SELECT DATEADD(month, -2, hire_date) AS 'TwoMonthsAgo'
FROM employees
WHERE job_title = 'Developer';
```

This query uses the DATEADD() function to subtract two months from the hire date column of the employees table. It also uses the WHERE clause to filter only the employees whose job title is ‘Developer’.

The AS keyword is used to alias the result column to ‘TwoMonthsAgo’.

### Description of Example Problem

Let’s consider an example problem where we need to find the date that is 30 days before a given date. This problem can be useful in many scenarios, such as calculating the due date of a task, or finding the date of an event that happened 30 days ago.

### Solution using DATEADD() Function

To solve this problem, we can use the DATEADD() function to subtract 30 days from the given date. The following query demonstrates how to do this:

```
DECLARE @GivenDate DATE = '2022-01-01';
SELECT DATEADD(day, -30, @GivenDate) AS '30DaysBefore';
```

In this query, we declare a variable @GivenDate and set its value to ‘2022-01-01’.

We then use the DATEADD() function to subtract 30 days from @GivenDate, and alias the result column to ’30DaysBefore’. The query returns the result ‘2021-12-02’, which is 30 days before ‘2022-01-01’.

## Conclusion

In conclusion, the DATEADD() function in T-SQL is a powerful tool that allows us to subtract dates and perform many other date/time calculations. By using the DATEADD() function, we can easily calculate the duration between two events, determine the due date for a task, or find the date of an event that occurred a certain number of days ago.

In this article, we have gone over the basics of using the DATEADD() function to subtract dates in T-SQL and provided an example case of how to get the date 30 days before a given date. Hopefully, this article has provided you with the knowledge and skills necessary to work with dates in T-SQL more effectively.

## Arguments of the DATEADD() Function

The DATEADD() function is a commonly used function in T-SQL for adding or subtracting a specified number of date/time units to a given starting date. There are three arguments that we can provide to this function, which are explained below.

### 1. Date/Time Unit

The first argument of the DATEADD() function specifies the date/time unit that we want to add or subtract to the starting date.

This can be one of the following values:

- year
- quarter
- month
- week
- day
- hour
- minute
- second
- millisecond
- microsecond
- nanosecond

We need to provide one of these values as a string literal. For example, if we want to add or subtract months to a starting date, we can use the string literal ‘month’ as the first argument of the function.

### 2. Date/Time Unit Value

The second argument of the DATEADD() function specifies the number of units that we want to add or subtract from the starting date.

This argument can be a positive or negative integer. For example, if we want to add two months to a starting date, we can use the integer value 2 as the second argument of the function.

If we want to subtract two months, we can use the integer value -2 instead. 3.

### Date Expression

The third and final argument of the DATEADD() function is the starting date that we want to add or subtract a specified number of date/time units from. This argument can be a date that we type literally as a string, a reference to a date column in a table, or a variable that contains a date value.

For example, if we want to add three weeks to a starting date of January 1st, 2022, we can use the following query:

`SELECT DATEADD(week, 3, '2022-01-01');`

This returns the value ‘2022-01-22’, which is the date that is three weeks after January 1st, 2022.

### Result of the DATEADD() Function

The result of the DATEADD() function is a changed date that reflects the addition or subtraction of the specified date/time units from the starting date. The function does not modify the starting date but returns a new date value that reflects the changed date.

For example, suppose we have a table called employees with a hire_date column that contains the hire date of each employee. We want to add one year to the hire date of each employee and retrieve the resulting date.

We can use the following query:

```
SELECT hire_date, DATEADD(year, 1, hire_date) AS resulting_date
FROM employees;
```

This query returns two columns. The first column is the original hire date of each employee, and the second column is the resulting date that is one year after the hire date.

The function does not modify the original hire dates in the table but returns a new date value that reflects the changed date. It is important to note that the DATEADD() function returns a datetime value that includes both a date and a time component, even if the starting date argument does not include a time component.

For example, if we use the following query:

`SELECT DATEADD(day, 1, '2022-01-01');`

This returns the value ‘2022-01-02 00:00:00.000’, which includes both a date and a time component, even though the starting date argument only contains the date part.

## Conclusion

The DATEADD() function in T-SQL is a powerful tool that allows us to add or subtract a specified number of date/time units to a given starting date. It takes three arguments, which are the date/time unit, the date/time unit value, and the starting date.

The result of the function is a changed date that reflects the addition or subtraction of the specified date/time units from the starting date. By using the DATEADD() function, we can perform many date/time calculations in T-SQL and simplify our data manipulation and analysis workflows.

In conclusion, the DATEADD() function in T-SQL allows us to add or subtract a specified number of date/time units from a starting date, making it a powerful tool for performing various date/time calculations. The function takes three arguments, namely the date/time unit, the date/time unit value, and the starting date.

The result of the function is a changed date that reflects the addition or subtraction of the specified date/time units from the starting date. By mastering DATEADD(), we can significantly simplify our data manipulation and analysis workflows.

Hopefully, this article has provided you with valuable knowledge and skills needed to subtract, add and modify dates in T-SQL.