Вычтите один день из 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 и был неверным)

FoxDeploy
источник
24

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

SELECT GETDATE() - 1

2016-12-25 15:24:50.403
Филип Рего
источник
6

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

select DATEADD(day, -1, convert(date, 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

Если честно, я просто использую:

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