将datediff显示为秒,毫秒

Pie*_*ems 16 sql t-sql sql-server datetime

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

我试过datediff(s, begin,end),datediff(ms, begin,end)但是我希望区别seconds,milliseconds如下:

4,14
63,54
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 27

SELECT 
  DATEDIFF(MILLISECOND, begin, end) / 1000, 
  DATEDIFF(MILLISECOND, begin, end) % 1000
FROM ...;
Run Code Online (Sandbox Code Playgroud)

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

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

另外,我真的希望你有比begin和更好的列名end.

  • 工作完美,谢谢,是的,我的列名不同,这只是为了解释我的问题,如果让您感到困惑,抱歉。 (2认同)

Wol*_*ang 6

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

示例 1 秒 27 毫秒:

  1. DATEDIFF % 1000将返回 27
  2. CONVERT将转换为'27'
  3. 将构建字符串连接'1' + ',' + '27'
  4. 结果:'1.27'这意味着 270ms 而不是 27ms

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

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)
Run Code Online (Sandbox Code Playgroud)