44

値が2000-01-0108 :30:00の日時フィールドと、値が00:15(15分を意味する) の期間フィールドがあるとします。

これら2つを引くと、2000-01-0108:15:00になります。

また、1:15(1時間15分を意味する)を減算する場合、出力は2000-01-0107: 15:00になります。

やっていますSELECT DATEDIFF(minute, '00:15','2000-01-01 08:30:00');

しかし、出力は52595055です。どうすれば目的の結果を得ることができますか?

NB〜私がそうするならばSELECT dateadd(minute, -15,'2000-01-01 08:30:00');、私は望ましい結果を得るでしょう、しかしそれは分フィールドを解析することを含みます。

編集:

答えによると、誰もがすべてを分に変換してから減算することを提案しています-したがって、1:30の場合、90分を減算する必要があります。それはいいです。分に変換せずに他の方法はありますか?

4

5 に答える 5

76
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)
于 2010-02-22T05:38:22.767 に答える
4

負の期間を使用して、DATEADDを使用します。例えば

DATEADD(minute, -15, '2000-01-01 08:30:00') 
于 2010-02-22T05:38:18.907 に答える
2

やってみました

SELECT DATEADD(mi, -15,'2000-01-01 08:30:00')

DATEDIFFは、2つの日付の差です。

于 2010-02-22T05:39:15.120 に答える
2

私は同じことをしようとしてしばらく時間を費やし、から減算しようとしましたhours:minutes-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
于 2012-09-12T13:44:17.037 に答える
1

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')
于 2010-02-22T05:39:07.673 に答える