Подтвердить что ты не робот

Получить дату и время на сегодня в полночь и добавить к ней

Есть ли команда sql для получения сегодняшней даты в полночь и возможность добавить к ней несколько минут?

4b9b3361

Ответ 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) 

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