Subtraia um dia da data e hora

102

Eu tenho uma consulta para buscar a data diff entre 2 datetime como:

SELECT DATEDIFF(DAY, @CreatedDate , GETDATE())

Ex :

SELECT DATEDIFF(DAY, '2013-03-13 00:00:00.000' , GETDATE())

Preciso que uma consulta funcione assim, que subtraia um dia do dia criado:

SELECT DATEDIFF(DAY, **@CreatedDate- 1** , GETDATE())
James
fonte
1
Por que não apenas adicionar 1 ao resultado?
Damien_The_Unbeliever
Se subtrair 1 do resultado está dando a resposta desejada, então a pergunta que você fez parece errada, uma vez que subtrair do resultado é equivalente a adicionar um número de dias na data anterior.
Damien_The_Unbeliever
Então a expressão que você postou como sua primeira resposta é a mesma que eu usaria - você poderia postar como uma resposta, mas como eu disse, significa que sua pergunta não está realmente correta (o DATEDIFFentre 2003-03-12e hoje é 14 , não 12).
Damien_The_Unbeliever
Sim ... você está certo ... funciona do contrário com os resultados ..
James

Respostas:

124

Tente isto

SELECT DATEDIFF(DAY,  DATEADD(day, -1, '2013-03-13 00:00:00.000'), GETDATE())

OU

SELECT DATEDIFF(DAY,  DATEADD(day, -1, @CreatedDate), GETDATE())
iogue
fonte
3
Seguindo a resposta de Philip Rego, você pode usar SELECT GETDATE () - 1 para subtrair dias de uma data.
José Barbosa
44

Não tenho certeza sobre o que exatamente você está tentando fazer, mas acho que esta função SQL irá ajudá-lo:

SELECT DATEADD(day,-1,'2013-04-01 16:25:00.250')

O acima lhe dará 2013-03-31 16:25:00.250.

Leva você de volta exatamente um dia e funciona em qualquer formato de data / hora ou data padrão.

Tente executar este comando e veja se ele oferece o que você está procurando:

SELECT DATEADD(day,-1,@CreatedDate)
Chris
fonte
33

Para simplesmente subtrair um dia da data de hoje:

Select DATEADD(day,-1,GETDATE())

(a postagem original usava -7 e estava incorreta)

FoxDeploy
fonte
24

Aparentemente, você pode subtrair o número de dias que deseja de uma data e hora.

SELECT GETDATE() - 1

2016-12-25 15:24:50.403
Philip Rego
fonte
6

Isso deve funcionar.

select DATEADD(day, -1, convert(date, GETDATE()))
Samithagun
fonte
1
SELECT DATEDIFF (
    DAY, 
    DATEDIFF(DAY, @CreatedDate, -1), 
    GETDATE())
Daniel Imms
fonte
1

Tente isso, que isso irá ajudá-lo

SELECT DATEDIFF(DAY, DATEADD(DAY,-1,'2013-03-13 00:00:00.000') , GETDATE())
Vijay Singh Rana
fonte
1

Para ser honesto, eu apenas uso:

select convert(nvarchar(max), GETDATE(), 112)

que dá YYYYMMDDe menos um dele.

Ou mais corretamente

select convert(nvarchar(max), GETDATE(), 112) - 1 

para a data de ontem.

Substitua Getdate()pelo seu valorOrderDate

select convert(nvarchar (max),OrderDate,112)-1 AS SubtractDate FROM Orders

deve fazer isso.

meekon5
fonte
-1

Você pode tentar isso.

Timestamp = 2008-11-11 13: 23: 44.657;

SELECT DATE_SUB(OrderDate,INTERVAL 1 DAY) AS SubtractDate FROM Orders

saída: 2008-11-10 13: 23: 44.657

Espero que ajude a resolver seu problema.

chintan
fonte
2
Servidor SQL. Não suporta INTERVALou DATE_SUB.
Damien_The_Unbeliever
SELECT DATEADD (day, 45, OrderDate) FROM Orders. Você entendeu?
chintan