In MySQL, puoi usare SUBTIME()
funzione per sottrarre un valore di tempo da un'espressione di ora o data e ora.
Il modo in cui funziona è che fornisci due argomenti; il primo è un valore di ora o datetime e il secondo è un valore di ora. Il SUBTIME()
la funzione sottrae quindi il secondo argomento dal primo e restituisce il risultato.
Sintassi
La sintassi è questa:
SUBTIME(expr1,expr2)
Dove expr1
può essere un'espressione time o datetime e expr2
è un'espressione del tempo.
E così expr2
viene sottratto da expr1
.
Esempio 1 – Utilizzo di base
Ecco un esempio da dimostrare.
SELECT SUBTIME('12:35:00', '1:30');
Risultato:
+-----------------------------+ | SUBTIME('12:35:00', '1:30') | +-----------------------------+ | 11:05:00 | +-----------------------------+
Esempio 2 – Sottrazione dei secondi
In questo esempio, sottraggo anche un numero di secondi dal valore del tempo.
SELECT SUBTIME('12:35:00', '1:30:30');
Risultato:
+--------------------------------+ | SUBTIME('12:35:00', '1:30:30') | +--------------------------------+ | 11:04:30 | +--------------------------------+
E otteniamo lo stesso risultato anche se omettiamo la parte dei secondi dall'argomento del tempo iniziale.
SELECT SUBTIME('12:35', '1:30:30');
Risultato:
+-----------------------------+ | SUBTIME('12:35', '1:30:30') | +-----------------------------+ | 11:04:30 | +-----------------------------+
Esempio 3 – Secondi frazionari
Puoi anche sottrarre la parte dei secondi frazionari.
SELECT SUBTIME('12:35:00.888888', '1:30:30.555555');
Risultato:
+----------------------------------------------+ | SUBTIME('12:35:00.888888', '1:30:30.555555') | +----------------------------------------------+ | 11:04:30.333333 | +----------------------------------------------+
Esempio 4 – Risultati negativi
È abbastanza valido finire con un valore negativo per il tuo risultato.
SELECT SUBTIME('12:35:00', '20:30:30');
Risultato:
+---------------------------------+ | SUBTIME('12:35:00', '20:30:30') | +---------------------------------+ | -07:55:30 | +---------------------------------+
Esempio 5 – Sottrai da un valore DateTime
In questo esempio sottraggo da un valore datetime (anziché solo un valore temporale come negli esempi precedenti).
SELECT SUBTIME('2021-01-01 12:35:00', '1:30:30');
Risultato:
+-------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '1:30:30') | +-------------------------------------------+ | 2021-01-01 11:04:30 | +-------------------------------------------+
In questo caso, la parte della data è rimasta invariata, poiché il secondo argomento non era abbastanza grande da incidere su di essa.
In questo prossimo esempio, aumento il secondo argomento in modo che sia abbastanza grande da influenzare la parte della data.
SELECT SUBTIME('2021-01-01 12:35:00', '100:30:30');
Risultato:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '100:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Come si vede in questo esempio, i valori temporali non si limitano a essere inferiori a 24 ore (possono variare da -838:59:59 a 838:59:59 .
Tuttavia, puoi anche fare cose come questa:
SELECT SUBTIME('2021-01-01 12:35:00', '4 4:30:30');
Risultato:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '4 4:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Esempio 6 – Limiti del valore temporale
Come accennato, il tipo di dati temporali può variare da -838:59:59 a 838:59:59 . Ciò significa che non puoi sottrarre altro. Significa anche che il risultato non può essere al di fuori di questo intervallo. Ad esempio, non puoi farlo:
SELECT SUBTIME('12:35:00', '20000000:30:30');
Risultato:
+---------------------------------------+ | SUBTIME('12:35:00', '20000000:30:30') | +---------------------------------------+ | -826:24:59 | +---------------------------------------+ 1 row in set, 1 warning (0.01 sec)
Il risultato è completamente sbagliato e MySQL mostra un avviso.
Ma non è solo il secondo argomento di cui devi stare attento. Incontrerai lo stesso problema anche se il primo argomento è inizialmente un valore negativo:
SELECT SUBTIME('-800:35:00', '50:30:30');
Risultato:
+-----------------------------------+ | SUBTIME('-800:35:00', '50:30:30') | +-----------------------------------+ | -838:59:59 | +-----------------------------------+ 1 row in set, 1 warning (0.00 sec)