5

私は現在、DD:HH:MI:SEC 形式で結果を返す 2 つの日付の差を計算する SQL スクリプトを作成しています。例: 日付 1: 2012 年 7 月 30 日午後 4:00 日付 2: 2012 年 5 月 4 日 10:31 AM

結果は 87:05:29:00 になるはずです

このためのスクリプトを手伝ってもらえますか? よろしく、アルジュン

4

3 に答える 3

10

sql-server を使用している場合は、次のようにできます。

declare @x int, 
        @dt1 smalldatetime = '1996-03-25 03:24:16', 
        @dt2 smalldatetime = getdate()

set @x = datediff (s, @dt1, @dt2)


SELECT convert(varchar, @x / (60 * 60 * 24)) + ':'
+ convert(varchar, dateadd(s, @x, convert(datetime2, '0001-01-01')), 108)

ここを参照

于 2012-05-29T13:37:08.143 に答える
0

さて、計算を実行したい場合は、次のようにすることもできます。

DECLARE @SecsInADay INT = 60 * 60 * 24
DECLARE @DATE1 DATETIME = CONVERT(DATETIME,'30/07/2012 16:00:00')
DECLARE @DATE2 DATETIME = CONVERT(DATETIME,'04/05/2012 10:31:00')
DECLARE @Days INT = DATEDIFF(DAY, @DATE2, @DATE1)
DECLARE @DiffInSeconds INT = DATEDIFF(SECOND, @DATE2, @DATE1)
DECLARE @TotalDaysInSeconds INT = @Days * @SecsInADay
DECLARE @RemainingHours INT = @DiffInSeconds - @TotalDaysInSeconds
DECLARE @Hours INT = @RemainingHours / 3600
DECLARE @Seconds INT = @RemainingHours % 3600
DECLARE @Minutes INT = @Seconds / 60
DECLARE @RemainingSeconds INT = @Seconds % 60

SELECT
CASE WHEN @Days < 10 THEN '0' + CAST(@Days AS VARCHAR) ELSE CAST(@Days AS VARCHAR) END + ':' +
CASE WHEN @Hours < 10 THEN '0' + CAST(@Hours AS VARCHAR) ELSE CAST(@Hours AS VARCHAR) END + ':' +
CASE WHEN @Minutes < 10 THEN '0' + CAST(@Minutes AS VARCHAR) ELSE CAST(@Minutes AS VARCHAR) END + ':' +
CASE WHEN @RemainingSeconds < 10 THEN '0' + CAST(@RemainingSeconds AS VARCHAR) ELSE CAST(@RemainingSeconds AS VARCHAR) END
于 2014-02-13T15:36:30.213 に答える
0

こんにちは、私は同様の問題を抱えていました。考えるのに時間がかかりました。これが私の解決策です。ユーザー サブスクリプションを含むテーブルがありました。悲しい開始時間と終了時間があります。私の問題はもう少し複雑で、基本的には次のようになりました。

SELECT subscription_id, time_open, time_closed, TIMESTAMPDIFF(DAY,time_open,time_closed) AS Day,

HOUR(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Hour,

MINUTE(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Minute,

SECOND(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Second

FROM `user_subscription`

したがって、基本的にこのクエリが行うことは、最初の行で日付を推測して日数を計算することです。次に、丸一日の日数を開始時刻に追加し、合計で終了時刻を減らすので、現在の日付の時刻が残ります。その後、そこから時間、分、秒を選択するだけです。すべてをまとめたい場合は、文字列を連結できますが、この方法では、文字列とは異なり、さらに使用できます。

于 2013-05-22T14:51:16.247 に答える