Problema:
Você gostaria de obter a data 30 dias antes de uma determinada data em T-SQL.
Exemplo:
Nosso banco de dados tem uma tabela chamada
Computer com dados nas colunas Id , Name e PurchaseDate . | Id | Nome | Data de compra |
|---|---|---|
| 1 | Sony GX1000 | 20-01-2019 |
| 2 | Samsung LX2000 | 15-04-2019 |
| 3 | Dell K80 | 2019-08-30 |
Vamos pegar o nome de cada computador e a data 30 dias antes sua data de compra.
Solução:
Usaremos a função DATEADD() para subtrair um determinado número de dias de uma data.
SELECT Name,
DATEADD(day, -30, PurchaseDate)
AS BeforePurchaseDate;
FROM Computer;
Segue o resultado da consulta:
| Nome | Antes da compra |
|---|---|
| Sony GX1000 | 21-12-2018 |
| Samsung LX2000 | 16-03-2019 |
| Dell K80 | 31-07-2019 |
Discussão:
Se você quiser subtrair datas ou horas no SQL Server, use o
DATEADD() função. São necessários três argumentos. O primeiro argumento é a unidade de data/hora – em nosso exemplo, especificamos o dia unidade. O próximo é a unidade de data ou hora valor . Em nosso exemplo, isso é -30 , porque estamos levando 30 dias a partir da data atual. Lembre-se de que o menos indica subtração O valor que; sem este sinal, você está adicionando à data determinada.
O último argumento é a data em que estamos operando; pode ser uma coluna de data/hora/datahora ou qualquer expressão que retorne uma data ou hora. Em nosso exemplo, usamos
PurchaseDate , uma date coluna. A função retorna uma data alterada. Em nosso exemplo, a consulta para o computador chamado
'Dell K80' retorna uma nova data em BeforePurchaseDate coluna. A data original '2019-08-30' é alterado para a data de 30 dias atrás:'2018-07-31' . Você pode usar o
DATEADD() função para todos os tipos de dados de data e hora.