【问题标题】:Using DATEADD and DATEDIFF truncates the time使用 DATEADD 和 DATEDIFF 会截断时间
【发布时间】:2019-04-18 12:50:48
【问题描述】:

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

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。

【问题讨论】:

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


    【解决方案1】:

    尝试如下

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • -DAY(GETDATE()) + 1 可以简化为1-DAY(GETDATE())。除此之外,+1。
        猜你喜欢
        • 2015-07-20
        • 1970-01-01
        • 2021-11-15
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多