使用DATEADD和DATEDIFF会截断时间



我使用以下内容来获取下个月的第一天:

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。

您可以添加两个datetime值,一个用于日期,另一个用于时间:

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

我猜您想要当前时间的时间值。

@date减去DAY(@date) - 1天,得到该月的第一天,包括时间。然后添加一个月:

SELECT DATEADD(MONTH, 1, DATEADD(DAY, -DAY(GETDATE()) + 1, GETDATE()))
-- 2018-12-01 04:52:33.403

尝试下面的

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()))

最新更新