Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL DATEDIFF() vs TIMEDIFF():Apa Bedanya?

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 |
+----------+----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah dengan tipe konten saat memuat perlengkapan di Django

  2. MySQL - abaikan kesalahan penyisipan:entri duplikat

  3. Perbandingan mesin pencari teks lengkap - Lucene, Sphinx, Postgresql, MySQL?

  4. Bagaimana cara memperbaikinya:Tidak ditemukan driver yang cocok untuk kesalahan jdbc:mysql://localhost/dbname saat menggunakan kumpulan?

  5. Gambaran Umum Replikasi Cluster-to-Cluster