In MySQL kunt u de SUBTIME()
. gebruiken functie om een tijdwaarde af te trekken van een tijd- of datetime-expressie.
De manier waarop het werkt is, je geeft twee argumenten; de eerste is een tijd- of datetime-waarde en de tweede is een tijdwaarde. De SUBTIME()
functie trekt dan het tweede argument van het eerste af en geeft het resultaat terug.
Syntaxis
De syntaxis gaat als volgt:
SUBTIME(expr1,expr2)
Waar expr1
kan een tijd- of datetime-expressie zijn, en expr2
is een tijduitdrukking.
En dus expr2
wordt afgetrokken van expr1
.
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld om te demonstreren.
SELECT SUBTIME('12:35:00', '1:30');
Resultaat:
+-----------------------------+ | SUBTIME('12:35:00', '1:30') | +-----------------------------+ | 11:05:00 | +-----------------------------+
Voorbeeld 2 – Seconden aftrekken
In dit voorbeeld trek ik ook een aantal seconden af van de tijdwaarde.
SELECT SUBTIME('12:35:00', '1:30:30');
Resultaat:
+--------------------------------+ | SUBTIME('12:35:00', '1:30:30') | +--------------------------------+ | 11:04:30 | +--------------------------------+
En we krijgen hetzelfde resultaat, zelfs als we het secondengedeelte van het initiële tijdargument weglaten.
SELECT SUBTIME('12:35', '1:30:30');
Resultaat:
+-----------------------------+ | SUBTIME('12:35', '1:30:30') | +-----------------------------+ | 11:04:30 | +-----------------------------+
Voorbeeld 3 – Fractionele seconden
U kunt ook het gedeelte van de fractie van seconden aftrekken.
SELECT SUBTIME('12:35:00.888888', '1:30:30.555555');
Resultaat:
+----------------------------------------------+ | SUBTIME('12:35:00.888888', '1:30:30.555555') | +----------------------------------------------+ | 11:04:30.333333 | +----------------------------------------------+
Voorbeeld 4 – Negatieve resultaten
Het is heel terecht om een negatieve waarde voor je resultaat te krijgen.
SELECT SUBTIME('12:35:00', '20:30:30');
Resultaat:
+---------------------------------+ | SUBTIME('12:35:00', '20:30:30') | +---------------------------------+ | -07:55:30 | +---------------------------------+
Voorbeeld 5 – Aftrekken van een Datetime-waarde
In dit voorbeeld trek ik af van een datetime-waarde (in tegenstelling tot alleen een tijdwaarde zoals in de vorige voorbeelden).
SELECT SUBTIME('2021-01-01 12:35:00', '1:30:30');
Resultaat:
+-------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '1:30:30') | +-------------------------------------------+ | 2021-01-01 11:04:30 | +-------------------------------------------+
In dit geval was het datumgedeelte ongewijzigd, omdat het tweede argument niet groot genoeg was om het te beïnvloeden.
In dit volgende voorbeeld verhoog ik het tweede argument zodat het groot genoeg is om het datumgedeelte te beïnvloeden.
SELECT SUBTIME('2021-01-01 12:35:00', '100:30:30');
Resultaat:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '100:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Zoals te zien is in dit voorbeeld, zijn tijdwaarden niet beperkt tot minder dan 24 uur (ze kunnen variëren van -838:59:59 naar 838:59:59 .
U kunt echter ook dit soort dingen doen:
SELECT SUBTIME('2021-01-01 12:35:00', '4 4:30:30');
Resultaat:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '4 4:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Voorbeeld 6 – Beperkingen van de tijdwaarde
Zoals vermeld, kan het tijdgegevenstype variëren van -838:59:59 naar 838:59:59 . Dit betekent dat u niet meer dan dat kunt aftrekken. Het betekent ook dat het resultaat niet buiten dit bereik mag liggen. U kunt dit bijvoorbeeld niet doen:
SELECT SUBTIME('12:35:00', '20000000:30:30');
Resultaat:
+---------------------------------------+ | SUBTIME('12:35:00', '20000000:30:30') | +---------------------------------------+ | -826:24:59 | +---------------------------------------+ 1 row in set, 1 warning (0.01 sec)
Het resultaat is volledig verkeerd en MySQL geeft een waarschuwing weer.
Maar het is niet alleen het tweede argument waar je voorzichtig mee moet zijn. U zult hetzelfde probleem tegenkomen als het eerste argument aanvankelijk een negatieve waarde is:
SELECT SUBTIME('-800:35:00', '50:30:30');
Resultaat:
+-----------------------------------+ | SUBTIME('-800:35:00', '50:30:30') | +-----------------------------------+ | -838:59:59 | +-----------------------------------+ 1 row in set, 1 warning (0.00 sec)