Вычтите один день из datetime


102

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

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?
Damien_The_Unbeliever

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

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

Да ... вы правы ... с результатами работает как раз наоборот ...
Джеймс,

Ответы:


124

Попробуй это

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

ИЛИ

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

3
После ответа Филипа Рего вы можете использовать SELECT GETDATE () - 1, чтобы вычесть дни из даты.
José Barbosa

44

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

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

Вышеуказанное даст вам 2013-03-31 16:25:00.250.

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

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

SELECT DATEADD(day,-1,@CreatedDate)

33

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

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

(исходный пост использовал -7 и был неверным)


24

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

SELECT GETDATE() - 1

2016-12-25 15:24:50.403




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

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


-1

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

Отметка времени = 11.11.2008 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.
Damien_The_Unbeliever

ВЫБЕРИТЕ ДОБАВЛЕНИЕ ДАТЫ (день, 45, Дата заказа) ИЗ заказов. Ты понял?
chintan
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.