0

開始時間と終了時間がたくさんあります。

    Start       End         Delta
    20:47:22    22:47:02    120
    22:49:12    0:48:47    -1321
    0:50:42     2:50:22     120
    ...
    23:11:07    2:10:44    -1261

私が使用するコードは次のとおりです(時間はvarcharであるため)

  CONVERT(VARCHAR(8), DATEDIFF(minute, max(max_time), min(min_time)) ,114) 
  as delta_time,

しかし、ご覧のとおり、一晩であるため、結果はマイナスになります。119分と179分(上記の例)の正しい結果を得ることについての考え。

デルタが負の場合をチェックするcaseステートメントを使用することを考えました。負の場合は、終了時間に24時間を追加してから、減算してみてください。

 CASE WHEN DATEDIFF(minute, max(max_time), min(min_time)) < 0 THEN  
 DATEADD(minute, 1440, min(min_time)) 
 ELSE 0 END AS deltatest

ただし、SQLServerが時刻を1900-01-0200:48:47.000に変更するだけなので、このコードは機能しません(翌日、24:48:47のようなものではありません)。何かご意見は?CASEステートメントに変換を追加する方法はありますか?ありがとう。

4

1 に答える 1

1

計算されたすべてのデルタにいつでも1440を追加してから、値mod1440を取得できます。

SELECT (120 + 1440) % 1440, (-1321 + 1440) % 1440

結果:

----------- -----------
120         119
于 2012-08-24T14:36:43.760 に答える