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 oFORMAT()
função retorna seu resultado como uma string.
Outra opção é usarCONVERT()
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 comoYEAR()
, 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 dodate
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 oFORMAT()
função, ele seria retornado como uma string.