Установить временную часть переменной даты-времени

Я работаю над запросом, который будет автоматическим заданием. Он должен найти все транзакции между 8 вечера и 8 вечера в последний день. Я думал сделать что-то вроде этого

DECLARE @start_date DATETIME
DECLARE @end_date DATETIME

SET @start_date = DATEADD(DAY, -2, GETDATE())
SET @end_date = DATEADD(DAY, -1, GETDATE())

Для автоматизированного запроса это хорошо работает при определении даты. Но часть TIME переменной - это текущее время выполнения запроса. Есть ли простой простой способ жестко записать временную часть обеих переменных в 8:00 PM?

Ответ 1

DECLARE @start_date DATETIME
DECLARE @end_date DATETIME

SET @start_date = DATEADD(hour, 20, DATEDIFF(DAY, 2, GETDATE()))
SET @end_date = @start_date + 1

select @start_date, @end_date

Ответ 2

Это также будет работать:

DECLARE @start_date datetime
DECLARE @end_date datetime

SET @start_date = LEFT(CONVERT(nvarchar, DATEADD(DAY, -2, GETDATE()), 120), 11) + N'20:00:00'
SET @end_date = @start_date + 1

select @start_date, @end_date

Хотя ответ cyberkiwi очень умный! =)

Ответ 3

Мне нужно было вывести дату из базы данных и добавить к ней 3:00 Pm. Я сделал это таким образом

select dateadd(hour, 15, datediff(day, 0, myDatabaseDate)) 
from dbo.myDatabaseTable
where myDatabaseId = 1

Результат, который он вернул, был 2017-10-01 15:00:00.000. Дата в базе данных 2017-10-01. Решение, которое я предложил, состояло в том, чтобы сохранить текущую дату. Я добавил 0 дней к моей существующей дате. Я дал ему 15:00 часов, и это сработало как шарм.

Ответ 4

Мне нужно было сделать что-то подобное, создайте процедуру, которая будет выполняться с определенного времени за предыдущий день до определенного времени в текущий день.

Это то, что я сделал, чтобы установить дату начала в 16:30 в предыдущий день, в основном вычтите части, которые вы не хотите вернуть их обратно, затем добавьте значение, которое вы хотите.

-- Set Start Date to previous day and set start time to 16:30.00.000

SET @StartDate = GetDate()
SET @StartDate = DateAdd(dd,- 1, @StartDate) 
SET @StartDate = DateAdd(hh,- (DatePart(hh,@StartDate))+16, @StartDate) 
SET @StartDate = DateAdd(mi,- (DatePart(mi,@StartDate))+30, @StartDate) 
SET @StartDate = DateAdd(ss,- (DatePart(ss,@StartDate)), @StartDate) 
SET @StartDate = DateAdd(ms,- (DatePart(ms,@StartDate)), @StartDate) 

Надеюсь, это поможет кому-то.