Dua fungsi tanggal yang disertakan dalam MySQL adalah DATEDIFF()
dan TIMEDIFF()
.
Kedua fungsi melakukan hal yang serupa, tetapi dengan beberapa perbedaan yang berarti.
Tabel berikut merangkum perbedaan antara kedua fungsi ini:
DATEDIFF() | TIMEDIFF() |
---|---|
Hasil dinyatakan sebagai nilai dalam hari. | Hasil dinyatakan sebagai nilai waktu. |
Bandingkan hanya nilai tanggal argumennya. | Membandingkan nilai waktu argumennya. |
Menerima ekspresi tanggal atau tanggal dan waktu. | Menerima ekspresi waktu atau tanggal-dan-waktu. |
Kedua argumen dapat memiliki tipe yang berbeda (tanggal atau tanggal dan waktu). | Kedua argumen harus bertipe sama (baik waktu atau tanggal-dan-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 DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';
Hasil:
+----------+----------+ | DATEDIFF | TIMEDIFF | +----------+----------+ | 1 | 24:00:00 | +----------+----------+
Jadi kita dapat melihat bahwa DATEDIFF()
mengembalikan 1
, yang berarti “1 hari”, dan TIMEDIFF()
mengembalikan 24:00:00
yang merupakan representasi waktu tepat 1 hari.
Contoh 2 – Menentukan Nilai Waktu
Mari kita lihat apa yang terjadi jika kita meningkatkan nilai waktu dari salah satu variabel.
SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00'; SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';
Hasil:
+----------+----------+ | DATEDIFF | TIMEDIFF | +----------+----------+ | 1 | 36:15:35 | +----------+----------+
Jadi DATEDIFF()
mengembalikan hasil yang sama seperti pada contoh sebelumnya. Ini karena hanya membandingkan nilai tanggal (mengabaikan nilai waktu apa pun).
TIMEDIFF()
fungsi, di sisi lain, membandingkan waktu, dan karena itu mengembalikan hasil yang lebih tepat. Ini menunjukkan kepada kita bahwa ada 36 jam, 15 menit, dan 35 detik antara dua nilai tanggal dan waktu.
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 DATEDIFF(@date1, @date2) AS 'DATEDIFF Date', DATEDIFF(@time1, @time2) AS 'DATEDIFF Time', TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date', TIMEDIFF(@time1, @time2) AS 'TIMEDIFF Time';
Hasil:
+---------------+---------------+---------------+---------------+ | DATEDIFF Date | DATEDIFF Time | TIMEDIFF Date | TIMEDIFF Time | +---------------+---------------+---------------+---------------+ | 1 | NULL | 00:00:00 | 12:15:35 | +---------------+---------------+---------------+---------------+
Hasil pertama dan terakhir baik-baik saja, karena tipe argumen yang benar dilewatkan. Namun, dua hasil di tengah memiliki tipe data yang salah dan oleh karena itu hasil yang benar tidak dapat dihitung.
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 DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF', TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF';
Hasil:
+----------+----------+ | DATEDIFF | TIMEDIFF | +----------+----------+ | 1 | NULL | +----------+----------+
Jadi kita dapat melihat bahwa DATEDIFF()
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 fungsi (waktu dan tanggal-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 | +----------+----------+