Artikel ini membahas perbedaan antara dua fungsi MySQL; DATEDIFF()
dan TIMESTAMPDIFF()
.
Kedua fungsi mengembalikan perbedaan antara dua tanggal dan/atau waktu, tetapi hasilnya berbeda antara kedua fungsi.
Tabel berikut merangkum perbedaan antara kedua fungsi ini:
DATEDIFF() | TIMESTAMPDIFF() |
---|---|
Memerlukan 2 argumen. | Memerlukan 3 argumen. |
Kurangi argumen ke-2 dari argumen ke-1 (expr1 expr2). | Kurangi argumen ke-2 dari argumen ke-3 (expr2 expr1). |
Hasil dinyatakan sebagai nilai dalam hari. | Hasil dinyatakan sebagai unit yang disediakan oleh argumen pertama. |
Hanya dapat membandingkan nilai tanggal argumennya. | Dapat membandingkan nilai tanggal dan waktu dari argumennya. |
Contoh 1 – Operasi Dasar
Berikut adalah contoh yang menunjukkan cara kerja fungsi-fungsi ini, dan bagaimana hasilnya berbeda, bahkan saat menggunakan unit yang sama.
SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00'; SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'TIMESTAMPDIFF';
Hasil:
+----------+---------------+ | DATEDIFF | TIMESTAMPDIFF | +----------+---------------+ | 1 | -1 | +----------+---------------+
Jadi kedua fungsi mengembalikan perbedaan dalam hari, namun satu hasil positif dan yang lainnya negatif. Ini karena DATEDIFF()
kurangi tanggal kedua dari tanggal pertama, sedangkan TIMESTAMPDIFF()
kurangi tanggal pertama dari tanggal kedua.
Contoh 2 – Mengubah Unit
Seperti yang ditunjukkan contoh sebelumnya, TIMESTAMPDIFF()
memungkinkan Anda untuk menentukan unit untuk hasil yang akan dikembalikan sebagai (sebenarnya, ini memerlukan Anda untuk menentukan unit). Sebaliknya, DATEDIFF()
tidak memungkinkan Anda untuk menentukan unit. Ini hanya mengembalikan hasil dalam beberapa hari.
Jadi kita bisa memodifikasi contoh sebelumnya sehingga TIMESTAMPDIFF()
mengembalikan jumlah jam, bukan hari:
SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00'; SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(hour, @date1, @date2) AS 'TIMESTAMPDIFF';
Hasil:
+----------+---------------+ | DATEDIFF | TIMESTAMPDIFF | +----------+---------------+ | 1 | -24 | +----------+---------------+
Anda dapat menggunakan hingga mikrodetik:
SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00'; SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'TIMESTAMPDIFF';
Hasil:
+----------+---------------+ | DATEDIFF | TIMESTAMPDIFF | +----------+---------------+ | 1 | -86400000000 | +----------+---------------+
Contoh 3 – Presisi
Ketepatan DATEDIFF()
adalah satu hari, dan TIMESTAMPDIFF()
bisa turun ke mikrodetik. Namun ketepatan TIMESTAMPDIFF()
(dan unit yang dibandingkan) masih bergantung pada unit yang ditentukan.
SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-10 23:59:59'; SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';
Hasil:
+----------+------+-------+---------+---------+--------------+ | DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds | +----------+------+-------+---------+---------+--------------+ | 0 | 0 | 23 | 1439 | 86399 | 86399000000 | +----------+------+-------+---------+---------+--------------+
Dan inilah hasilnya jika kita menambah tanggal ke-2 dengan satu detik (yang membawanya ke hari berikutnya):
SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-11 00:00:00'; SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';
Hasil:
+----------+------+-------+---------+---------+--------------+ | DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds | +----------+------+-------+---------+---------+--------------+ | -1 | 1 | 24 | 1440 | 86400 | 86400000000 | +----------+------+-------+---------+---------+--------------+
Berikut contoh lain, kali ini melihat tampilannya saat kita mengembalikan bulan, kuartal, dan tahun ketika perbedaannya adalah satu bulan (atau 31 hari):
SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-11-10 00:00:00'; SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(month, @date1, @date2) AS 'Month', TIMESTAMPDIFF(quarter, @date1, @date2) AS 'Quarter', TIMESTAMPDIFF(year, @date1, @date2) AS 'Year';
Hasil:
+----------+------+-------+---------+------+ | DATEDIFF | Days | Month | Quarter | Year | +----------+------+-------+---------+------+ | -31 | 31 | 1 | 0 | 0 | +----------+------+-------+---------+------+
Contoh 4 – Tipe Argumen Salah
Kedua fungsi mengembalikan null jika diberikan tipe argumen yang salah.
SET @time1 = '12:15:35', @time2 = '00:00:00'; SELECT DATEDIFF(@time1, @time2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @time1, @time2) AS 'TIMESTAMPDIFF';
Hasil:
+----------+---------------+ | DATEDIFF | TIMESTAMPDIFF | +----------+---------------+ | NULL | NULL | +----------+---------------+
Contoh 5 – Tipe Argumen Campuran
Kedua fungsi tersebut memungkinkan Anda memberikan tanggal sebagai satu argumen dan waktu tanggal sebagai argumen lain.
SET @thedate = '2010-10-11', @thedatetime = '2010-10-10 00:00:00'; SELECT DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF', TIMESTAMPDIFF(day, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';
Hasil:
+----------+---------------+ | DATEDIFF | TIMESTAMPDIFF | +----------+---------------+ | 1 | -1 | +----------+---------------+