2013-03-26 13 views
70

Mam zapytanie do pobrania datę diff między 2 datetime jako:Odejmij jeden dzień z datetime

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

Ex : 

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

muszę mieć pracę zapytania takiego który odejmie dzień od utworzonej dzień:

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

Dlaczego po prostu nie dodać 1 do wyniku? –

+0

Jeśli * odjęcie * 1 od wyniku daje pożądaną odpowiedź, to postawione pytanie wydaje się błędne, ponieważ * odjęcie * od wyniku jest równoważne * dodaniu * liczby dni do wcześniejszych dat. –

+0

To wyrażenie, które napisałeś jako swoją pierwszą odpowiedź, jest tym, którego użyłbym - możesz to opublikować jako odpowiedź, ale jak mówię, oznacza to, że twoje pytanie nie jest prawdziwe ("DATEDIFF" między '2003-03-12' i dziś jest 14, a nie 12). –

Odpowiedz

78

Spróbuj

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

LUB

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

Spróbuj tego, może to pomoże Ci

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

Można spróbować.

Znacznik czasu = 2008-11-11 13: 23: 44.657;

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

wyjściowa: 2008-11-10 13: 23: 44,657

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

+2

Serwer SQL. Nie obsługuje "INTERVAL" lub "DATE_SUB". –

+0

WYBIERZ DATEADD (dzień, 45, Data zamówienia) Z zamówień. Masz to? – chintan

26

Nie jestem pewien, o 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 daje 2013-03-31 16:25:00.250.

Sprowadza Cię dokładnie jeden dzień i działa w dowolnym standardowym formacie daty i czasu lub daty.

Spróbuj uruchomić tę komendę i sprawdzić, czy daje ci to, czego szukasz:

SELECT DATEADD(day,-1,@CreatedDate) 
1

Szczerze mówiąc po prostu użyć:

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

co daje YYYYMMDD i minus jeden od niego.

albo bardziej poprawnie

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

do wczorajszej daty.

Wymień Getdate() z wartością OrderDate

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

powinno wystarczyć.

19

po prostu odjąć jeden dzień z dzisiejszym dniem:

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

(oryginalny post wykorzystywane -7 i błędnie)

2

to powinno działać.

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

Podobno można odjąć żądaną liczbę dni z datetime.

SELECT GETDATE() - 1 

2016-12-25 15:24:50.403 
Powiązane problemy