値が2000-01-01 08:30:である日時フィールドと、値が:15(15分を意味する)である期間フィールドがあるとします
これら2つを差し引くと、2000-01-01 08:15:になります
また、1:15(1時間15分を意味する)を減算する場合、出力は2000-01-01 07:15:になります
SELECT DATEDIFF(minute, '00:15','2000-01-01 08:30:00');
を試しています
しかし、出力は52595055です。目的の結果を得るにはどうすればよいですか?
N.B.〜SELECT dateadd(minute, -15,'2000-01-01 08:30:00');
を実行すると、目的の結果が得られますが、これには分のフィールドの解析が含まれます。
編集:
答えによると、誰もがすべてを分に変換してから差し引くことを提案しています-それが1:30の場合、90分を差し引く必要があります。それはいいです。分に変換しない他の方法はありますか?
SELECT DATEADD(minute, -15, '2000-01-01 08:30:00');
2番目の値(この場合は-15)は数値でなければなりません(つまり、「00:15」のような文字列ではありません)。時間と分を減算する必要がある場合は、文字列を:で分割して時間と分を取得し、次のようなものを使用して減算することをお勧めします
SELECT DATEADD(minute, -60 * @h - @m, '2000-01-01 08:30:00');
ここで、@ hは文字列の時間部分であり、@ mは文字列の分部分です。
編集:
より良い方法は次のとおりです。
SELECT CAST('2000-01-01 08:30:00' as datetime) - CAST('00:15' AS datetime)
[〜#〜] dateadd [〜#〜] を使用し、負の期間を使用します。例えば.
DATEADD(minute, -15, '2000-01-01 08:30:00')
やってみました
SELECT DATEADD(mi, -15,'2000-01-01 08:30:00')
DATEDIFFは2つの日付の差です。
私は同じことをしようとして、hours:minutes
from datetime
-私がやった方法は次のとおりです。
convert( varchar, cast((RouteMileage / @average_speed) as integer))+ ':' + convert( varchar, cast((((RouteMileage / @average_speed) - cast((RouteMileage / @average_speed) as integer)) * 60) as integer)) As TravelTime,
dateadd( n, -60 * CAST( (RouteMileage / @average_speed) AS DECIMAL(7,2)), @entry_date) As DepartureTime
DeliveryDate TravelTime DepartureTime
2012-06-02 12:00:00.000 25:49 2012-06-01 10:11:00.000
[〜#〜] datepart [〜#〜] を使用して間隔を引き離し、 [〜#〜] dateadd [〜#〜] を使用して部分を減算します。
select dateadd(
hh,
-1 * datepart(hh, cast('1:15' as datetime)),
dateadd(
mi,
-1 * datepart(mi, cast('1:15' as datetime)),
'2000-01-01 08:30:00'))
または、最初に分に変換することもできます(ただし、OPはそうしませんが)。
declare @mins int
select @mins = datepart(mi, cast('1:15' as datetime)) + 60 * datepart(hh, cast('1:15' as datetime))
select dateadd(mi, -1 * @mins, '2000-01-01 08:30:00')