Ответ 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
Я работаю над запросом, который будет автоматическим заданием. Он должен найти все транзакции между 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?
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
Это также будет работать:
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: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 часов, и это сработало как шарм.
Мне нужно было сделать что-то подобное, создайте процедуру, которая будет выполняться с определенного времени за предыдущий день до определенного времени в текущий день.
Это то, что я сделал, чтобы установить дату начала в 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)
Надеюсь, это поможет кому-то.