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

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

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)

33

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

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

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


24

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

SELECT GETDATE() - 1

2016-12-25 15:24:50.403



1

Spróbuj tego, niech to ci pomoże

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

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


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


2
SQL Server. Nie obsługuje INTERVALani DATE_SUB.
Damien_The_Unbeliever

SELECT DATEADD (day, 45, OrderDate) FROM Orders. Masz to?
chintan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.