【发布时间】: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
我正在尝试计算两个日期时间值之间的差异。
我尝试了datediff(s, begin,end) 和datediff(ms, begin,end),但是我希望将差异返回为seconds,milliseconds,如下所示:
4,14
63,54
【问题讨论】:
标签: sql sql-server tsql datetime
实际上,标记的答案最初在 1 - 99 毫秒内产生了错误的结果:
例如 1 秒 27 毫秒:
DATEDIFF % 1000 将返回 27CONVERT 将转换为 '27'
'1' + ',' + '27'
'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)
【讨论】:
DATEDIFF 在 MySQL 中只接受两个参数。这对我有用:
TIMESTAMPDIFF(SECOND, NOW(), '2019-09-09 18:52:00')
【讨论】:
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 ...;
我真的希望你有比begin 和end 更好的列名。
【讨论】: