Odejmij jeden dzień od daty i godziny

102

Mam zapytanie do pobrania różnicy dat między 2 datetime jako:

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

Ex :

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

Muszę mieć takie zapytanie, które odejmie dzień od utworzonego dnia:

SELECT DATEDIFF(DAY, **@CreatedDate- 1** , GETDATE())
James
źródło
1
Dlaczego po prostu nie dodać 1 do wyniku?
Damien_The_Unbeliever
Jeśli odjęcie 1 od wyniku daje żądaną odpowiedź, zadane pytanie wydaje się błędne, ponieważ odjęcie od wyniku jest równoznaczne z dodaniem liczby dni do wcześniejszej z dat.
Damien_The_Unbeliever
Wtedy wyrażenie, które zamieściłeś jako swoją pierwszą odpowiedź, jest tym, którego użyłbym - możesz zamieścić to jako odpowiedź, ale jak mówię, oznacza to, że twoje pytanie nie jest tak naprawdę poprawne ( DATEDIFFmiędzy 2003-03-12a dzisiaj jest 14 , a nie 12).
Damien_The_Unbeliever
Tak… masz rację… to działa odwrotnie z wynikami…
James

Odpowiedzi:

124

Spróbuj tego

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

LUB

SELECT DATEDIFF(DAY,  DATEADD(day, -1, @CreatedDate), GETDATE())
jog
źródło
3
Zgodnie z odpowiedzią Philipa Rego możesz użyć polecenia SELECT GETDATE () - 1, aby odjąć dni od daty.
José Barbosa
44

Nie jestem pewien, co dokładnie próbujesz zrobić, ale myślę, że ta funkcja SQL pomoże ci:

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

Powyższe da ci 2013-03-31 16:25:00.250.

Zabiera Cię dokładnie jeden dzień wstecz i działa na dowolnym standardowym formacie daty i godziny.

Spróbuj uruchomić to polecenie i sprawdź, czy daje ci to, czego szukasz:

SELECT DATEADD(day,-1,@CreatedDate)
Chris
źródło
33

Aby po prostu odjąć jeden dzień od dzisiejszej daty:

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

(oryginalny post użył -7 i był nieprawidłowy)

FoxDeploy
źródło
24

Najwyraźniej możesz odjąć żądaną liczbę dni od daty i godziny.

SELECT GETDATE() - 1

2016-12-25 15:24:50.403
Philip Rego
źródło
6

To powinno działać.

select DATEADD(day, -1, convert(date, GETDATE()))
samithagun
źródło
1
SELECT DATEDIFF (
    DAY, 
    DATEDIFF(DAY, @CreatedDate, -1), 
    GETDATE())
Daniel Imms
źródło
1

Spróbuj tego, niech to ci pomoże

SELECT DATEDIFF(DAY, DATEADD(DAY,-1,'2013-03-13 00:00:00.000') , GETDATE())
Vijay Singh Rana
źródło
1

Szczerze mówiąc po prostu używam:

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

co daje YYYYMMDDi minus jeden z tego.

Albo bardziej poprawnie

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

na wczorajszą datę.

Zastąp Getdate()swoją wartościąOrderDate

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

powinien to zrobić.

meekon5
źródło
-1

Możesz tego spróbować.

Sygnatura czasowa = 2008-11-11 13: 23: 44,657;

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

wyjście: 2008-11-10 13: 23: 44.657

Mam nadzieję, że pomoże to rozwiązać Twój problem.

chintan
źródło
2
SQL Server. Nie obsługuje INTERVALani DATE_SUB.
Damien_The_Unbeliever
SELECT DATEADD (day, 45, OrderDate) FROM Orders. Masz to?
chintan