2017-02-22 5 views
0

私は以下のコードで時差を計算していますが、それは私に逆の順序の違いを示していますなぜですか?時差の計算に予期しない結果がありましたか?

declare @startdate time = '08:00:00', @enddate time = '01:00:00' 
declare @hour varchar(25),@minutes varchar(25),@seconds varchar(25) 

set @hour=datediff(ss,@startdate,@enddate)/60/60%12 
set @minutes= datediff(ss,@startdate,@enddate)/60%60 
set @seconds= datediff(ss,@startdate,@enddate)%60 

select @hour+':'[email protected]+':'[email protected] 

私は12時間の差を計算しています。私はその違いが5時間であることを期待しています。それは私に-7時間を示しています。誰か説明できますか?

答えて

3

デフォルトでは、SQL Serverは24時間形式を使用します。 A.MかP.Mかを指定できます。

declare @startdate time = '08:00:00 AM', @enddate time = '01:00:00 PM' 
SELECT DATEDIFF(HH,@startdate,@enddate) 

指定された時間に2つの異なる日付が含まれていない場合は、これは言及されていない限り動作します。 例:

declare @startdate time = '08:00:00 PM', @enddate time = '01:00:00 PM' 
    SELECT DATEDIFF(HH,@startdate,@enddate) 

@enddateは、次の日に当たるように、これは間違った値になります。 より良い結果を得るには、時間とともに日付を指定することをお勧めします。

select datediff(HH, '02-21-2017 08:00:00 pm' ,'02-22-2017 01:00:00 PM') 
2

その出力は正確です。 01:00は08:00の7時間後です。だからこそあなたは負の数を得る。

あなたは12時間の時計を使用して差を計算していると言いました。さて、あなたはそれを何とかSQL Serverに示す必要があります。終了時刻に13:00を使用するか、時刻文字列のAMまたはPM子午線インジケータで日付を解析してください。

非常には、24時間以内の処理のみをお勧めします。それはあなたに多くの頭痛を惜しみ、コードをはるかに理解しやすくします。 UIレイヤの時間表示と解析を節約できます。

+0

私はstartdate = '08:00:00 pm 'とenddate = '01:00:00 pm'を取っていますが、同じ結果、つまり-7のままで、出力は17時間時間は夜8時から午後1時に始まるからです。どうして ? 12と24の両方の時計を使用 –

+0

時間とともに日付を渡してみてください。それはあなたの望む結果をもたらすはずです。 – Vikram

+0

正確に動作しています、ありがとう –

関連する問題