Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Exemplos de DATEADD() no SQL Server


No SQL Server, você pode usar o DATEADD() função para adicionar um período de tempo especificado a uma determinada data. Você também pode usá-lo para subtrair um período de tempo especificado.

Você também pode combinar DATEADD() com outras funções para formatar a data conforme necessário. Por exemplo, você pode pegar '2020-10-03', adicionar 10 anos e retornar o componente de ano (aumentado).

Este artigo contém exemplos para demonstrar.


Sintaxe


A sintaxe de DATEADD() fica assim:
DATEADD (dataparte, número, data)

Onde datepart é a parte da data que você deseja aumentar (ou diminuir), number é o valor para aumentar datepart por e date é a data em que a adição ocorrerá.

Exemplo 1


Aqui está um exemplo básico de adicionar dez anos a uma data:
SELECT DATEADD(ano, 10, '2020-10-03') AS 'Data futura';

Resultado:
+-------------------------+| Data futura ||-------------------------|| 2030-10-03 00:00:00.000 |+-------------------------+

Nesse caso, o valor de retorno inclui o componente de hora e a data. Isso ocorre porque o resultado é retornado como um datetime valor. O motivo pelo qual ele é retornado como esse tipo de dados é porque fornecemos uma string literal como date argumento. Quando você fornece um literal de string como a data, DATEADD() retorna um datetime valor.

Nos casos em que você não fornece um literal de string, o valor de retorno é o mesmo que o tipo de dados de date argumento. Por exemplo, se você fornecer um datetime2 argumento, o valor de retorno será datetime2 .

Exemplo 2 – Formatando o resultado


Podemos pegar o resultado acima e formatá-lo com o FORMAT() função:
SELECT FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy-MM-dd') AS 'yyyy-MM-dd', FORMAT(DATEADD(year, 10, '2020-10) -03'), 'dd/MM/aaaa') AS 'dd/MM/aaaa', FORMAT(DATAADD(ano, 10, '2020-10-03'), 'aaaa') AS 'aaaa', FORMAT( DATEADD(ano, 10, '2020-10-03'), 'aa') AS 'aa';

Resultado:
+--------------+--------------+--------+------+ | aaaa-MM-dd | dd/MM/aaaa | aaaa | aa ||--------------+--------------+--------+------|| 2030-10-03 | 10/03/2030 | 2030 | 30 |+--------------+--------------+--------+------+ 
Mas é importante observar que o FORMAT() função retorna seu resultado como uma string.

Outra opção é usar CONVERT() para converter o resultado em uma data tipo de dados:
SELECT CONVERT(data, DATEADD(ano, 10, '2020-10-03')) AS convertido;

Resultado:
+-------------+| Convertido ||-------------|| 2030-10-03 |+-------------+

Ou você pode usar uma função como YEAR() , que retorna o resultado como um inteiro:
SELECT YEAR(DATEADD(ano, 10, '2020-10-03')) COMO 'Ano futuro';

Resultado:
+---------------+| Ano Futuro ||---------------|| 2030 |+---------------+

Exemplo 3 - Subtração de datas


Você pode usar números negativos para subtrair da data:
SELECT DATEADD(ano, -10, '2020-10-03') AS 'Data anterior';

Resultado:
+-------------------------+| Data anterior ||-------------------------|| 2010-10-03 00:00:00.000 |+-------------------------+

E, claro, você pode formatar isso usando qualquer um dos métodos mencionados anteriormente.

Exemplo 4 – Datas do sistema


Aqui estão alguns exemplos de uso de várias funções para retornar a data/hora atual do computador no qual a instância do SQL Server está sendo executada.

SYSDATETIME()

SELECT SYSDATETIME() AS 'Data atual', DATEADD(ano, 10, SYSDATETIME()) AS 'Data futura';

Resultado:
+-----------------------------+---------------- -------------+| Data atual | Data futura ||-----------------------------+---------------- -------------|| 04-06-2018 05:57:51.7297042 | 04-06-2028 05:57:51.7297042 |+------------------------------+-------- ----------+

SYSDATETIMEOFFSET()

SELECT SYSDATETIME() AS 'Data atual', DATEADD(ano, 10, SYSDATETIME()) AS 'Data futura';

Resultado:
+--------------------------+------------------- -------+| Data atual | Data futura ||--------------------------+------------------- -------|| 06/04/18 06:02:07 +00:00 | 06/04/28 06:02:07 +00:00 |+--------------------------+------ --------------------+

Como mencionado, esses resultados são retornados usando o tipo de dados do date argumento (porque eles não são literais de string).

Formatando a saída

SELECT YEAR(SYSDATETIME()) AS 'Ano atual', YEAR(DATEADD(ano, 10, SYSDATETIME())) AS 'Ano futuro';

Resultado:
+----------------+---------------+| Ano atual | Ano Futuro ||----------------+---------------|| 2018 | 2028 |+----------------+---------------+

E como também mencionado, se você formatar a data, ela será retornada no tipo de dados para a função aplicável. Portanto, neste exemplo, o resultado é retornado como um int . Se tivéssemos formatado com o FORMAT() função, ele seria retornado como uma string.