24

2つの日時値の差を計算しようとしています。

試しましたが、次のようdatediff(s, begin,end)datediff(ms, begin,end)差を返したいのですが。seconds,milliseconds

4,14
63,54
4

3 に答える 3

37
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

于 2013-03-27T13:57:39.640 に答える
4

実際、マークされた回答は、もともとミリ秒1〜99で間違った結果を生成しました。

例1秒、27ミリ秒:

  1. DATEDIFF % 100027を返します
  2. CONVERTに変換されます'27'
  3. 文字列の連結が構築されます'1' + ',' + '27'
  4. 結果:'1.27'27msではなく270msを意味します

ミリ秒を3つのゼロに埋め込むことを忘れないでください。

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)
于 2015-07-03T07:40:00.303 に答える
0

DATEDIFFは、MySQLでは2つの引数のみを取ります。これは私のために働きます:

TIMESTAMPDIFF(SECOND, NOW(), '2019-09-09 18:52:00')
于 2019-09-09T15:57:00.337 に答える