【问题标题】:Show datediff as seconds, milliseconds将 datediff 显示为秒、毫秒
【发布时间】:2013-03-17 15:21:48
【问题描述】:

我正在尝试计算两个日期时间值之间的差异。

我尝试了datediff(s, begin,end)datediff(ms, begin,end),但是我希望将差异返回为seconds,milliseconds,如下所示:

4,14
63,54

【问题讨论】:

    标签: sql sql-server tsql datetime


    【解决方案1】:

    实际上,标记的答案最初在 1 - 99 毫秒内产生了错误的结果:

    例如 1 秒 27 毫秒:

    1. DATEDIFF % 1000 将返回 27
    2. CONVERT 将转换为 '27'
    3. 字符串连接将构建'1' + ',' + '27'
    4. 结果:'1.27' 表示 270 毫秒而不是 27 毫秒

    不要忘记将毫秒填充为三个零:

    DECLARE @start datetime2(7) = '2015-07-03 09:24:33.000'
    DECLARE @end datetime2(7) = '2015-07-03 09:24:34.027'
    
    SELECT 
        CAST (DATEDIFF(SECOND, @start, @end) AS nvarchar(3)) + N'.' +
        RIGHT('000' + CAST((DATEDIFF(MILLISECOND, @start, @end) % 1000) AS nvarchar(3)), 3)
    

    【讨论】:

      【解决方案2】:

      DATEDIFF 在 MySQL 中只接受两个参数。这对我有用:

      TIMESTAMPDIFF(SECOND, NOW(), '2019-09-09 18:52:00')
      

      【讨论】:

        【解决方案3】:
        SELECT 
          DATEDIFF(MILLISECOND, begin, end) / 1000, 
          DATEDIFF(MILLISECOND, begin, end) % 1000
        FROM ...;
        

        如果您绝对必须在 SQL 查询中将其形成为字符串(您的表示层不能这样做吗?),那么:

        SELECT 
          CONVERT(VARCHAR(12),  DATEDIFF(MILLISECOND, begin, end) / 1000)
          + ',' 
          + RIGHT('000' + CONVERT(VARCHAR(4), DATEDIFF(MILLISECOND, begin, end) % 1000), 3)
        FROM ...;
        

        我真的希望你有比beginend 更好的列名。

        【讨论】:

        • 工作得很好,谢谢,是的,我的列名不同,这只是为了解释我的问题,如果让您感到困惑,请见谅。
        猜你喜欢
        • 2014-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 2011-03-06
        • 2018-11-16
        • 2013-07-11
        相关资源
        最近更新 更多