2013-02-13 7 views
5

これについての助手のヘルプを使用できました。これは、常に24時間未満でなければなりません... T-SQLクエリの時間として2つの日時の値とショーの間の時間を計算する時刻としてのT-SQL書式の計算列

SELECT arrivalDate - departDate AS timeToComplete 

をしようとしています。しかし、ユーザーは実際に何を入力するかも知っていますか?

私はresutlsなしでこれを試しています。この上の任意のガイダンスについては

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

ありがとう:代わりに、例として1:23:41として結果を示すの

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

、のような結果を表示する方法があります。

+0

また、selectステートメントで要件を満たす私の更新されたサンプルを見ることができます。 –

答えて

2

ただ、このアプローチを使用してみてください:) 異なるものにする:

宣言@のDATE1日時; declare @ date2 datetime;

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'; 
+0

私はあなたがここで伝えようとしていることを理解していません。最初に欠けている括弧がいくつかありますが、これをSELECT文で使用したいと思います。 – htm11h

+0

クエリをコピーしたときに間違いを犯したことがあります。このクエリを正常に実行しました。残念ながら、今はsqlfiddle is not accesibleと私はあなたとシェアクエリーできません。 –

+0

@romanなぜsqlfiddleにアクセスできないのですか?サイトに何か問題がありますか? –

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)) 

ここではわかりやすくするために変数を使用していますが、これを1つのクエリにすることができます。 DATEDIFFは、あなたが合計を得るので、あなたが大きなものを削除するまで、違いの小さい塊のために働かないでしょう。たとえば、

DATEDIFF(HOUR, @arrivalDate, @departDate) 

は、合計時間を返します。

+0

うわー、これはコードには難しいかもしれませんが、私はおそらく私の問題を最もよく扱うと思います。 SQLデータソースコントロールでこれを実行しようとしています。ありがとう – htm11h

+0

完全にフォーマットされた文字列(例えば、 "0D、12H、30M、25S")を返すか、整数、日、時、分、秒の列を持つデータセットを返す関数にするのが適切かもしれません。そうすれば、データソースでインラインで呼び出すことができます。 – Bill

+0

非常にうまくいくと思われるソリューションへのリンクが付いたアップデートを投稿しました。再度、感謝します、 – htm11h

1

最後に、このリンクで素晴らしい解決策を見つけました。 SQL - Seconds to Day, Hour, Minute, Second 皆さん、ありがとうございました。私はこの問題をさらに詳しく知り、正しい情報を探しています。

関連する問題