Di MySQL, Anda dapat menggunakan SUBTIME()
berfungsi untuk mengurangi nilai waktu dari ekspresi waktu atau datetime.
Cara kerjanya adalah, Anda memberikan dua argumen; yang pertama adalah nilai waktu atau datetime, dan yang kedua adalah nilai waktu. SUBTIME()
function kemudian mengurangi argumen kedua dari argumen pertama dan mengembalikan hasilnya.
Sintaks
Sintaksnya seperti ini:
SUBTIME(expr1,expr2)
Dimana expr1
dapat berupa ekspresi waktu atau datetime, dan expr2
adalah ekspresi waktu.
Jadi expr2
dikurangi dari expr1
.
Contoh 1 – Penggunaan Dasar
Berikut ini contoh untuk didemonstrasikan.
SELECT SUBTIME('12:35:00', '1:30');
Hasil:
+-----------------------------+ | SUBTIME('12:35:00', '1:30') | +-----------------------------+ | 11:05:00 | +-----------------------------+
Contoh 2 – Pengurangan Detik
Dalam contoh ini, saya juga mengurangi beberapa detik dari nilai waktu.
SELECT SUBTIME('12:35:00', '1:30:30');
Hasil:
+--------------------------------+ | SUBTIME('12:35:00', '1:30:30') | +--------------------------------+ | 11:04:30 | +--------------------------------+
Dan kita mendapatkan hasil yang sama bahkan jika kita menghilangkan bagian detik dari argumen waktu awal.
SELECT SUBTIME('12:35', '1:30:30');
Hasil:
+-----------------------------+ | SUBTIME('12:35', '1:30:30') | +-----------------------------+ | 11:04:30 | +-----------------------------+
Contoh 3 – Detik Pecahan
Anda juga dapat mengurangi bagian pecahan detik.
SELECT SUBTIME('12:35:00.888888', '1:30:30.555555');
Hasil:
+----------------------------------------------+ | SUBTIME('12:35:00.888888', '1:30:30.555555') | +----------------------------------------------+ | 11:04:30.333333 | +----------------------------------------------+
Contoh 4 – Hasil Negatif
Cukup valid untuk berakhir dengan nilai negatif untuk hasil Anda.
SELECT SUBTIME('12:35:00', '20:30:30');
Hasil:
+---------------------------------+ | SUBTIME('12:35:00', '20:30:30') | +---------------------------------+ | -07:55:30 | +---------------------------------+
Contoh 5 – Kurangi dari Nilai Datetime
Dalam contoh ini saya mengurangi dari nilai datetime (sebagai lawan dari hanya nilai waktu seperti pada contoh sebelumnya).
SELECT SUBTIME('2021-01-01 12:35:00', '1:30:30');
Hasil:
+-------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '1:30:30') | +-------------------------------------------+ | 2021-01-01 11:04:30 | +-------------------------------------------+
Dalam hal ini, bagian tanggal tidak berubah, karena argumen kedua tidak cukup besar untuk memengaruhinya.
Dalam contoh berikut ini, saya meningkatkan argumen kedua sehingga cukup besar untuk mempengaruhi bagian tanggal.
SELECT SUBTIME('2021-01-01 12:35:00', '100:30:30');
Hasil:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '100:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Seperti yang terlihat dalam contoh ini, nilai waktu tidak dibatasi menjadi kurang dari 24 jam (dapat berkisar dari -838:59:59 ke 838:59:59 .
Namun, Anda juga dapat melakukan hal-hal seperti ini:
SELECT SUBTIME('2021-01-01 12:35:00', '4 4:30:30');
Hasil:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '4 4:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Contoh 6 – Batasan Waktu Nilai
Seperti yang disebutkan, tipe data waktu dapat berkisar dari -838:59:59 ke 838:59:59 . Ini berarti Anda tidak dapat mengurangi lebih dari itu. Ini juga berarti bahwa hasilnya tidak boleh di luar kisaran ini. Misalnya, Anda tidak dapat melakukan ini:
SELECT SUBTIME('12:35:00', '20000000:30:30');
Hasil:
+---------------------------------------+ | SUBTIME('12:35:00', '20000000:30:30') | +---------------------------------------+ | -826:24:59 | +---------------------------------------+ 1 row in set, 1 warning (0.01 sec)
Hasilnya benar-benar salah dan MySQL menampilkan peringatan.
Tapi itu bukan hanya argumen kedua yang perlu Anda waspadai. Anda juga akan mengalami masalah yang sama jika argumen pertama awalnya bernilai negatif:
SELECT SUBTIME('-800:35:00', '50:30:30');
Hasil:
+-----------------------------------+ | SUBTIME('-800:35:00', '50:30:30') | +-----------------------------------+ | -838:59:59 | +-----------------------------------+ 1 row in set, 1 warning (0.00 sec)