データ型時間の列が 2 つあります。datediff を使用して、時間の差を見つけています。問題は、00:00:00 から 06:00:00 までの差を見つけようとすると、-18 が返されることです。どうすれば修正できますか?注:これとの差をさらに計算する必要があるため、-3 で割ることはできません
my function- (datediff(HOUR, startHour, endHour))*60
前もって感謝します
データ型時間の列が 2 つあります。datediff を使用して、時間の差を見つけています。問題は、00:00:00 から 06:00:00 までの差を見つけようとすると、-18 が返されることです。どうすれば修正できますか?注:これとの差をさらに計算する必要があるため、-3 で割ることはできません
my function- (datediff(HOUR, startHour, endHour))*60
前もって感謝します
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);
パラメータを逆にします。
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
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)を参照