-2

データ型時間の列が 2 つあります。datediff を使用して、時間の差を見つけています。問題は、00:00:00 から 06:00:00 までの差を見つけようとすると、-18 が返されることです。どうすれば修正できますか?注:これとの差をさらに計算する必要があるため、-3 で割ることはできません

my function- (datediff(HOUR, startHour, endHour))*60

前もって感謝します

4

4 に答える 4

3

00:00:00と比較していません06:00:00。日付コンポーネントがあります

これは例として-18を与えます

DECLARE @starthour datetime = '00:00:00';
DECLARE @endhour datetime = '18991231 06:00:00';    
SELECT @starthour, @endhour, DATEDIFF(hour, @starthour, @endhour); 

SET @starthour = '20120507 00:00:00';
SET @endhour = '20120506 06:00:00';
SELECT @starthour, @endhour, DATEDIFF(hour, @starthour, @endhour); 
于 2012-05-07T13:10:48.403 に答える
2

パラメータを逆にします。

my function- (datediff(HOUR, endHour, startHour))*60 

編集:

関数 DATEDIFF は日付で機能しますが、何らかの理由で、午前 6 時から午前 0 時 (翌日) を差し引いていると見なされます。これは 18 時間です。

次のコード サンプルは SQL 2008 で問題なく動作するため、データ型をチェックして、DATETIME や SMALLDATETIME ではなく TIME を使用していることを確認する必要があります。

declare @t1 time
set @t1 = '00:00:00'
declare @t2 time 
set @t2 = '06:00:00'

select datediff(hour, @t1, @t2)

-- returns 6
于 2012-05-07T12:54:43.560 に答える
0

構文:

DATEDIFF (datepart, startdate, enddate )

例:

SELECT DATEDIFF(hour, '00:00:00', '06:00:00');  

結果: 6

SELECT DATEDIFF(hour, '00:00:00', '06:00:00')*60;  

結果: 360

DATEDIFF (Transact-SQL)を参照

于 2012-05-07T13:07:29.257 に答える