Artikel ini membahas perbedaan antara TIMEDIFF()
MySQL dan TIMESTAMPDIFF()
fungsi.
Kedua fungsi melakukan hal yang serupa, tetapi ada beberapa perbedaan signifikan di antara keduanya.
Tabel berikut merangkum perbedaan antara kedua fungsi ini:
TIMEDIFF() | TIMESTAMPDIFF() |
---|---|
Memerlukan 2 argumen. | Memerlukan 3 argumen. |
Mengurangi argumen ke-2 dari argumen ke-1 (date1 date2). | Kurangi argumen ke-2 dari argumen ke-3 (date2 date1). |
Hasil dinyatakan sebagai nilai waktu (dan memiliki batasan tipe data waktu). | Hasil adalah bilangan bulat, dinyatakan oleh sejumlah unit seperti yang diberikan oleh argumen pertama. |
Menerima ekspresi waktu atau datetime. | Menerima ekspresi tanggal atau waktu. |
Kedua argumen harus bertipe sama (baik waktu maupun tanggal). | Kedua argumen dapat memiliki tipe yang berbeda (tanggal atau waktu). |
Contoh 1 – Perbedaan Dasar
Berikut adalah contoh yang menunjukkan perbedaan mendasar antara fungsi-fungsi ini.
SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@date1, @date2) AS 'TIMEDIFF', TIMESTAMPDIFF(hour, @date1, @date2) AS 'TIMESTAMPDIFF';
Hasil:
+----------+---------------+ | TIMEDIFF | TIMESTAMPDIFF | +----------+---------------+ | 24:00:00 | -24 | +----------+---------------+
Jadi kita dapat melihat bahwa TIMEEDIFF()
mengembalikan nilai waktu, dan TIMESTAMPDIFF()
mengembalikan bilangan bulat.
Juga, TIMEEDIFF()
tanggal 2 dikurangi dari tanggal 1, sedangkan TIMESTAMPDIFF()
dikurangi tanggal 1 dari tanggal 2.
Contoh 2 – Mengubah Unit
Seperti disebutkan, TIMESTAMPDIFF()
memungkinkan kita untuk menentukan unit mana yang mewakili hasil. Berikut beberapa contohnya:
SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@date1, @date2) AS 'TIMEDIFF', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds';
Hasil:
+----------+-------+---------+---------+ | TIMEDIFF | Hours | Minutes | Seconds | +----------+-------+---------+---------+ | 36:15:35 | -36 | -2175 | -130535 | +----------+-------+---------+---------+
Namun, inilah yang terjadi jika kita menggunakan unit yang lebih besar dari perbedaan waktu sebenarnya:
SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@date1, @date2) AS 'TIMEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(week, @date1, @date2) AS 'Weeks', TIMESTAMPDIFF(month, @date1, @date2) AS 'Months';
Hasil:
+----------+------+-------+--------+ | TIMEDIFF | Days | Weeks | Months | +----------+------+-------+--------+ | 36:15:35 | -1 | 0 | 0 | +----------+------+-------+--------+
Dalam hal ini, perbedaan waktu tidak cukup besar untuk mempengaruhi nilai minggu atau bulan.
Contoh 3 – Tipe Argumen Salah
Berikut adalah contoh yang terjadi ketika Anda meneruskan jenis argumen yang salah ke setiap fungsi.
SET @date1 = '2010-10-11', @date2 = '2010-10-10', @time1 = '12:15:35', @time2 = '00:00:00'; SELECT TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date', TIMESTAMPDIFF(hour, @time1, @time2) AS 'TIMESTAMPDIFF Time';
Hasil:
+---------------+--------------------+ | TIMEDIFF Date | TIMESTAMPDIFF Time | +---------------+--------------------+ | 00:00:00 | NULL | +---------------+--------------------+
TIMEDIFF()
tidak mendukung tipe data 'tanggal', sehingga mengembalikan 00:00:00
.
Dan TIMESTAMPDIFF()
fungsi tidak mendukung tipe data 'waktu', sehingga mengembalikan NULL
.
Contoh 4 – Tipe Argumen Campuran
Inilah yang terjadi jika Anda menyediakan dua tipe data yang berbeda untuk setiap fungsi.
SET @thedate = '2010-10-11', @thetime = '12:15:35', @thedatetime = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF', TIMESTAMPDIFF(hour, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';
Hasil:
+----------+---------------+ | TIMEDIFF | TIMESTAMPDIFF | +----------+---------------+ | NULL | -24 | +----------+---------------+
Jadi kita dapat melihat bahwa TIMESTAMPDIFF()
menangani tipe data campuran dengan baik (asalkan itu tanggal atau tanggal-dan-waktu).
Namun, TIMEDIFF()
mengharuskan kedua argumen memiliki tipe yang sama, jadi kita mendapatkan NULL
, meskipun kedua argumen adalah tipe yang didukung oleh fungsi (waktu dan waktu).
Kami dapat mengonfirmasi bahwa kedua tipe tersebut sebenarnya didukung oleh fungsi ini dengan contoh berikut:
SET @thetime1 = '12:15:35', @thetime2 = '10:15:35', @thedatetime1 = '2010-10-12 00:00:00', @thedatetime2 = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@thetime1, @thetime2) AS 'time', TIMEDIFF(@thedatetime1, @thedatetime2) AS 'datetime';
Hasil:
+----------+----------+ | time | datetime | +----------+----------+ | 02:00:00 | 48:00:00 | +----------+----------+
Jadi tidak masalah, selama kedua argumen memiliki tipe yang sama (baik nilai waktu atau waktu).