Использование DATEADD и DATEDIFF усекает время - PullRequest
0 голосов
/ 15 ноября 2018

Я использую следующее, чтобы получить 1-й день следующего месяца со временем:

select DATEADD(m, DATEDIFF(m, -1, getdate()), 0)

Но вывод:

 2018-12-01 00:00:00.000

И ожидаемый результат:

 2018-12-01 11:53:30.677

Я пробовал разные подходы, но не смог получить требуемый результат.Я использую SQL Server 2008.

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Вы можете добавить два datetime значения, одно для даты, а другое для времени:

select DATEADD(month, DATEDIFF(month, -1, getdate()), 0) + cast(cast(getdate() as time) as datetime)

Я предполагаю, что вы хотите значение времени от текущего времени.

0 голосов
/ 15 ноября 2018

Вычтите DAY(@date) - 1 дней из @date, чтобы получить первый день этого месяца, включая время.Затем добавьте один месяц:

SELECT DATEADD(MONTH, 1, DATEADD(DAY, -DAY(GETDATE()) + 1, GETDATE()))
-- 2018-12-01 04:52:33.403
0 голосов
/ 15 ноября 2018

попробуйте как ниже

select DATEADD(m, DATEDIFF(m, -1, getdate()), 0)+  convert(DATETIME,'11:53:30.677')

в случае текущего времени это будет как ниже

select DATEADD(m, DATEDIFF(m, -1, getdate()), 0)+  convert(datetime, convert(time,getdate()))
...