2013-03-26 10 views
70

У меня есть запрос для извлечения даты диф между 2 DateTime как:Вычесть один день из DateTime

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

Ex : 

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

мне нужно иметь работу запроса, как это, которое будет отнимать день от созданного дня:

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

Почему бы не просто добавить 1 к результатам? –

+0

Если * вычитание * 1 из результата дает желаемый ответ, то заданный вами вопрос кажется неправильным, так как * вычитание * из результата эквивалентно * добавлению * нескольких дней к более ранним датам. –

+0

Тогда выражение, которое вы отправили в качестве вашего первого ответа на меня, - это тот, который я использовал бы - вы могли бы разместить его в качестве ответа, но, как я сказал, это означает, что ваш вопрос не совсем правильный ('DATEDIFF' между '2003-03-12' и сегодня 14, а не 12). –

ответ

78

Попробуйте

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

ИЛИ

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

Попробуйте это, возможно, это поможет вам

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

Вы можете попробовать это.

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

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

выход: 2008-11-10 13: 23: 44,657

Я надеюсь, что это поможет решить вашу проблему.

+2

SQL Server. Не поддерживает 'INTERVAL' или' DATE_SUB'. –

+0

SELECT DATEADD (день, 45, OrderDate) FROM Orders. Ты понял? – chintan

26

Я не уверен, что именно вы пытаетесь сделать, но я думаю, что это SQL функция поможет вам:

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

выше даст вам 2013-03-31 16:25:00.250.

Он возвращает вас ровно один день и работает с любым стандартным форматом даты и времени.

Попробуйте запустить эту команду и посмотреть, если это дает вам то, что вы ищете:

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

Чтобы быть честным, я просто использую:

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

который дает YYYYMMDD и минус один от него.

Или более правильно

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

для вчерашнего дня.

Заменить Getdate() с значением OrderDate

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

должны это сделать.

19

Чтобы просто вычесть один день с даты сегодняшнего:

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

(оригинальный пост используется -7 и неверен)

2

Это должно работать.

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

Очевидно, вы можете вычесть количество дней, которое вы хотите, из даты и времени.

SELECT GETDATE() - 1 

2016-12-25 15:24:50.403 
Смежные вопросы