5

これについてグルの助けを借りることができます。2 つの日時値の間の時間を計算し、T-SQL クエリで時間として表示しようとしています...

SELECT arrivalDate - departDate AS timeToComplete

これは常に 24 時間未満である必要があります。しかし、ユーザーが実際に何を入力するかは誰にもわかりません。

私は結果なしでこのようなことを試みてきました。

SELECT  
   CAST(time(7), 
   CONVERT(datetime, arrivalDate - departDate) AS timeToComplete) AS newTime, 

例として結果を表示する代わりに、1:23:41次のような結果を表示する方法はありますか:

0D, 1H, 23M, 33S. 

これに関するガイダンスをありがとう。

4

3 に答える 3

4

合計の差を秒単位で取得し、その中から最大の部分を取り続けることができます。つまり、日から始めて、次に時、分、秒です。

DECLARE @arrivalDate DATETIME = '2013-01-19 23:59:59'
DECLARE @departDate DATETIME = '2013-01-25 11:52:30'

DECLARE @SecondsDifference INT = DATEDIFF(SECOND, @arrivalDate, @departDate)

DECLARE @DayDifference INT = @SecondsDifference / 86400
DECLARE @HourDifference INT = (@SecondsDifference - (@DayDifference * 86400)) / 3600
DECLARE @MinDifference INT = (@SecondsDifference - (@DayDifference * 86400) - (@HourDifference * 3600)) / 60
DECLARE @SecDifference INT = (@SecondsDifference - (@DayDifference * 86400) - (@HourDifference * 3600) - (@MinDifference * 60))

ここではわかりやすくするために変数を使用していますが、これを単一のクエリに組み込むこともできます。DATEDIFF は、合計を取得するため、大きなチャンクを削除するまで、差の小さなチャンクに対しては機能しません。例えば:

DATEDIFF(HOUR, @arrivalDate, @departDate) 

時間数から日数を引いたものではなく、合計時間数を返します。

于 2013-02-13T18:30:06.207 に答える
2

ただ違うように:)このアプローチを使用してみてください:

@date1 日時を宣言します。@date2 日時を宣言します。

set @date1 = '2012-05-01 12:00:000'
set @date2 = '2012-05-01 18:00:000'


    SELECT 
    STUFF(
        STUFF(
            STUFF(
                RIGHT(CONVERT(NVARCHAR(19), CONVERT(DATETIME, DATEADD(second, DATEDIFF(S, @date1, @date2), '20000101')), 120), 11), 
                3, 1, 'D, '), 
            8, 1, 'H, '), 
        13, 1, 'M, ') + ' S';
于 2013-02-13T18:10:39.473 に答える
1

最後に、このリンクで素晴らしい解決策を見つけました .SQL - Seconds to Day, Hour, Minute, Second 助けてくれてありがとう.

于 2013-02-13T20:30:36.487 に答える