sql >> Base de Datos >  >> RDS >> Sqlserver

Ejemplos de DATEADD() en SQL Server

En SQL Server, puede usar DATEADD() Función para agregar un período de tiempo específico a una fecha dada. También puede usarlo para restar un período de tiempo específico.

También puede combinar DATEADD() con otras funciones para dar formato a la fecha según sea necesario. Por ejemplo, podría tomar '2020-10-03', agregar 10 años y luego devolver el componente de año (aumentado).

Este artículo contiene ejemplos para demostrar.

Sintaxis

La sintaxis de DATEADD() va así:

DATEADD (datepart , number , date )

Donde datepart es la parte de la fecha que desea aumentar (o disminuir), number es la cantidad a aumentar datepart por y date es la fecha en la que tendrá lugar la adición.

Ejemplo 1

Este es un ejemplo básico de cómo sumar diez años a una fecha:

SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date';

Resultado:

+-------------------------+
| Future Date             |
|-------------------------|
| 2030-10-03 00:00:00.000 |
+-------------------------+

En este caso, el valor devuelto incluye el componente de hora además de la fecha. Esto se debe a que el resultado se devuelve como datetime valor. La razón por la que se devuelve como este tipo de datos es porque proporcionamos un literal de cadena como date argumento. Cuando proporciona un literal de cadena como la fecha, DATEADD() devuelve una fechahora valor.

En los casos en que no proporcione un literal de cadena, el valor de retorno es el mismo que el tipo de datos de date argumento. Por ejemplo, si proporciona una fecha y hora2 argumento, el valor de retorno será datetime2 .

Ejemplo 2:formato del resultado

Podemos tomar el resultado anterior y formatearlo con FORMAT() función:

SELECT 
    FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy-MM-dd') AS 'yyyy-MM-dd',
    FORMAT(DATEADD(year, 10, '2020-10-03'), 'dd/MM/yyyy') AS 'dd/MM/yyyy',
    FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy') AS 'yyyy',
    FORMAT(DATEADD(year, 10, '2020-10-03'), 'yy') AS 'yy';

Resultado:

+--------------+--------------+--------+------+
| yyyy-MM-dd   | dd/MM/yyyy   | yyyy   | yy   |
|--------------+--------------+--------+------|
| 2030-10-03   | 03/10/2030   | 2030   | 30   |
+--------------+--------------+--------+------+

Pero es importante tener en cuenta que FORMAT() la función devuelve su resultado como una cadena.

Otra opción es usar CONVERT() para convertir el resultado a una fecha tipo de datos:

SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted;

Resultado:

+-------------+
| Converted   |
|-------------|
| 2030-10-03  |
+-------------+

O puede usar una función como YEAR() , que devuelve el resultado como un número entero:

SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year';

Resultado:

+---------------+
| Future Year   |
|---------------|
| 2030          |
+---------------+

Ejemplo 3:Resta de fechas

Puede usar números negativos para restar de la fecha:

SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date';

Resultado:

+-------------------------+
| Earlier Date            |
|-------------------------|
| 2010-10-03 00:00:00.000 |
+-------------------------+

Y, por supuesto, puede formatear esto usando cualquiera de los métodos mencionados anteriormente.

Ejemplo 4:fechas del sistema

Estos son algunos ejemplos del uso de varias funciones para devolver la fecha/hora actual desde la computadora en la que se ejecuta la instancia de SQL Server.

SYSDATETIME()

SELECT 
    SYSDATETIME() AS 'Current Date',
    DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';

Resultado:

+-----------------------------+-----------------------------+
| Current Date                | Future Date                 |
|-----------------------------+-----------------------------|
| 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 |
+-----------------------------+-----------------------------+

SYSDATETIMEOFFSET()

SELECT 
    SYSDATETIME() AS 'Current Date',
    DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';

Resultado:

+--------------------------+--------------------------+
| Current Date             | Future Date              |
|--------------------------+--------------------------|
| 4/6/18 6:02:07 am +00:00 | 4/6/28 6:02:07 am +00:00 |
+--------------------------+--------------------------+

Como se mencionó, estos resultados se devuelven utilizando el tipo de datos de date argumento (porque no son cadenas literales).

Dar formato a la salida

SELECT 
    YEAR(SYSDATETIME()) AS 'Current Year',
    YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';

Resultado:

+----------------+---------------+
| Current Year   | Future Year   |
|----------------+---------------|
| 2018           | 2028          |
+----------------+---------------+

Y como también se mencionó, si formatea la fecha, se devolverá en el tipo de datos para la función aplicable. Entonces, en este ejemplo, el resultado se devuelve como un int . Si lo hubiéramos formateado con FORMAT() función, se devolvería como una cadena.