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())

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())

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)

33

Para simplesmente subtrair um dia da data de hoje:

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

(a postagem original usava -7 e estava incorreta)


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

6

Isso deve funcionar.

select DATEADD(day, -1, convert(date, GETDATE()))

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

1

Tente isso, que isso irá ajudá-lo

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

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.


-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.


2
Servidor SQL. Não suporta INTERVALou DATE_SUB.
Damien_The_Unbeliever

SELECT DATEADD (day, 45, OrderDate) FROM Orders. Você entendeu?
chintan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.