使用DATEADD和DATEDIFF会截断时间

时间:2018-11-15 12:03:20

标签: sql sql-server sql-server-2008 datetime dateadd

我正在使用以下方法来获取下个月的第一天的时间:

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 :(得分:1)

您可以添加两个common = i.join(j.withColumnRenamed('COL_B', 'COL_A'), ['COL_A'], 'leftsemi') diff = i.subtract(common) diff.show() 值,一个为日期,另一个为时间:

diff
+---+-----+
| ID|COL_A|
+---+-----+
|  2|  456|
|  1|  123|
|  4|  678|
|  3|  111|
+---+-----+

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

尝试如下

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