Frage

Angenommen, ich habe ein DateTime -Feld, dessen Wert ist 2000-01-01 08:30:00 und ein Dauerfeld, dessen Wert heißt 00:15 (bedeutet 15 Minuten)

Wenn ich diese beiden subiere, sollte ich bekommen 2000-01-01 08:15:00

Auch wenn ich subtrahieren möchte 1:15 (bedeutet 1 Stunde 15 Minuten), die Ausgabe sollte sein 2000-01-01 07:15:00

ich versuche SELECT DATEDIFF(minute, '00:15','2000-01-01 08:30:00');

Aber die Ausgabe ist 52595055. Wie kann ich das gewünschte Ergebnis erzielen?

Nb ~ wenn ich es tue SELECT dateadd(minute, -15,'2000-01-01 08:30:00'); Ich werde das gewünschte Ergebnis erzielen, aber das beinhaltet das Analysieren des Minute -Feldes.

Bearbeiten:

Gemäß den Antworten schlägt jeder vor, alles in Minuten umzuwandeln und dann zu subtrahieren. Wenn es also 1:30 ist, muss ich 90 Minuten subtrahieren. Das ist gut. Irgendwelche anderen Weg, ohne in Minuten umzuwandeln?

War es hilfreich?

Lösung

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

Der zweite Wert (-15 in diesem Fall) muss numerisch sein (dh keine Zeichenfolge wie '00: 15 '). Wenn Sie Stunden und Minuten subtrahieren müssen

SELECT DATEADD(minute, -60 * @h - @m, '2000-01-01 08:30:00'); 

wobei @h der Stunden Teil Ihrer Zeichenfolge ist und @M der winzige Teil Ihrer Zeichenfolge ist

BEARBEITEN:

Hier ist ein besserer Weg:

SELECT CAST('2000-01-01 08:30:00' as datetime) - CAST('00:15' AS datetime)

Andere Tipps

Sie möchten verwenden DATEADD, mit einer negativen Dauer. z.B

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

Hast du es versucht

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

Datediff ist der Unterschied zwischen 2 Daten.

Ich habe eine Weile versucht, dasselbe zu tun, um das zu subtrahieren hours:minutes aus datetime - So hat ich es gemacht:

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 

AUSGANG:

DeliveryDate                TravelTime             DepartureTime
2012-06-02 12:00:00.000       25:49         2012-06-01 10:11:00.000

Verwenden DatePart Um Ihr Intervall auseinander zu ziehen, und DATEADD um die Teile zu subtrahieren:

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'))

Oder wir können zuerst in Minuten konvertieren (obwohl OP es vorziehen würde, nicht):

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')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top