Есть ли команда sql для получения сегодняшней даты в полночь и возможность добавить к ней несколько минут?
Получить дату и время на сегодня в полночь и добавить к ней
Ответ 1
Да, просто используйте функции latiff и dateadd, чтобы удалить время с любой даты, затем добавьте дробную часть дня к этому номеру
Declare @aDate DateTime
Set @aDate = getDate()
Declare @Minutes Integer
Set @minutes = 600 -- 10 hours
Select DateAdd(day, DateDiff(day, 0, @aDate), 0) + @minutes / 1440.0 -- 1440 min/day
-- or You could also use the dateadd again...
Select DateAdd(minute, @minutes , DateAdd(day, DateDiff(day, 0, @aDate), 0))
Оба выбирают возвращение в 10:00 утра в тот же день (более или менее). Это работает из-за того, что... этот ответ SO >
EDIT: добавлен образец script, чтобы показать, как это работает:
declare @dtTim datetime = getDate()
declare @today datetime = dateAdd(day, dateDiff(day, 0, @dtTim ), 0)
select @dtTim, @today
Ответ 2
Дата сейчас в полночь:
Select DATEADD(d,0,DATEDIFF(d,0,GETDATE()))
ДОБАВИТЬ 600 минут:
Select DATEADD(mi,600,DATEDIFF(d,0,GETDATE()))
Ответ 3
Вы также можете отбрасывать date
, чтобы удалить временную часть:
declare @minutes int = 600
declare @start datetime = cast(getdate() as date)
declare @finish datetime = dateadd(mi, @minutes, @start)
Хотя, честно говоря, я не знаю, как это работает по сравнению с
dateadd(day, datediff(day, 0, getdate()), 0)
Ответ 4
Использовать следующее:
select DATEADD(SECOND, 36000, CAST(CONVERT(VARCHAR(10), GETDATE(), 101) AS datetime))
Таким образом вы можете отрегулировать секунды, чтобы точно определить время суток.
Прочтите это для форматирования даты и времени в SQL Server: Форматирование даты и времени SQL Server
Ответ 5
Necromancing:
Самый простой/быстрый способ:
SELECT
DATEADD(minute, 1,
CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS datetime)
)
или с UTC:
SELECT
DATEADD(minute, 1,
CAST(FLOOR(CAST( GETUTCDATE() AS float)) AS datetime)
)
Это работает, потому что в SQL-сервере datetime является значением с плавающей запятой, целочисленная часть представляет дни с 01.01.1900, подцелая часть представляет процент от полного дня (24 часа).
Поэтому, если вы округлите (floor)
число с плавающей запятой до целого числа, вы получите полночное время.
1900-01-01T00:00:00.000
равняется 0.
Ответ 6
Мне нужно было сделать что-то подобное, создать процедуру для запуска с определенного времени за предыдущий день до определенного времени в текущий день. Это то, что я сделал, чтобы установить дату начала в 16:30 предыдущего дня, в основном вычитайте части, которые вы не хотите вернуть их в 0, затем добавьте значение, которое вы хотите.
-- 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)
Надеюсь, это поможет кому-то.